Config Guide
Config Guide
ClaimCenter ™
Configuration Guide
Release 9.0.5
©2001-2018 Guidewire Software, Inc.
For information about Guidewire trademarks, visit http://guidewire.com/legal-notices.
Guidewire Proprietary & Confidential — DO NOT DISTRIBUTE
Contents
Part 1
ClaimCenter configuration basics
1 Overview of ClaimCenter configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
What you can configure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Guidewire internal methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
How you configure ClaimCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Types of application environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
The development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
The production environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35
Deploying configuration files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Deploying changes in a development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Deploying changes to the production server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Regenerating the data and security dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Generating the data and security dictionaries in HTML format . . . . . . . . . . . . . . . . . . . . . . .37
Generating the data and security dictionaries in XML format . . . . . . . . . . . . . . . . . . . . . . . .38
Generating the security dictionary from ClaimCenter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Generating the dictionaries as you generate a .war or .ear file . . . . . . . . . . . . . . . . . . . . . . . .38
Aspects of regenerating the Security Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Managing configuration changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
AssignmentQueuesEnabled. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
WeightedAssignmentEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
WeightedAssignmentGlobalDefaultWeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Batch process parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
BatchProcessHistoryPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
Business calendar parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
BusinessDayDemarcation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
BusinessDayEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
BusinessDayStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
BusinessWeekEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
HolidayList (obsolete) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsFridayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsMondayBusinessDay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsSaturdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsSundayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsThursdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsTuesdayBusinessDay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48
IsWednesdayBusinessDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
MaxAllowedDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
MinAllowedDate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
Business rules parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
BizRulesCacheStaleTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
BizRulesEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
BizRulesDeploymentEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
BizRulesDeploymentId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
BizRulesImportBootstrapRules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
BizRulesLeafSearchNumOfHops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
OnlineJavadocPrefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
Cache parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
ActivityPatternCacheMaxDuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
ExchangeRatesCacheRefreshIntervalSecs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheActiveTimeMinutes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
GlobalCacheDetailedStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheReapingTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheSizeMegabytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheSizePercent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheStaleTimeMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
GlobalCacheStatsRetentionPeriodDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
GlobalCacheStatsWindowMinutes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
GroupCacheRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
ScriptParametersRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
TreeViewRefresh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
ZoneCacheRefreshIntervalSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
Claim catastrophe parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
HeatMapCredential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
HeatMapServiceTemplate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
MaxCatastropheClaimFinderSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Claim health indicator and metric parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
ClaimHealthCalcMaxLossDateInYears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
InitialReserveAllowedPeriod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
MaxClaimResultsPerClaimHealthCalcBatch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Clustering parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
ClusteringEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
ClusterMemberPurgeDaysOld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
ConfigVerificationEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
4
Configuration Guide 9.0.5
PDFMergeHandlerLicenseKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
SerializationWhitelistEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Database parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableHashJoinForClaimSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableHashJoinForTeamGroupActivities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
DisableIndexFastFullScanForClaimSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DisableIndexFastFullScanForRecoverySearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DisableIndexFastFullScanForTeamGroupActivities. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DisableSequenceUtil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DisableSortMergeJoinForClaimSearch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DisableSortMergeJoinForTeamGroupActivities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
DiscardQueryPlansDuringStatsUpdateBatch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
IdentifyQueryBuilderViaComments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
IdentifyORMLayerViaComments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
MigrateToLargeIDsAndDatetime2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
QueryRewriteForClaimSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
SetSemiJoinNestedLoopsForClaimSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
UseOracleHintsOnMessageQueries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Data destruction parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
ArchiveReferenceTrackingEnabled Parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
ContactDestructionRequestAgeForPurgingResults parameter . . . . . . . . . . . . . . . . . . . . . . . .59
PersonalDataDestructionEnabled parameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Deduction parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
BackupWithholdingTypeCode. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
CalculateBackupWithholdingDeduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
StandardWithholdingRate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
Document creation and document management parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
DisplayDocumentEditUploadButtons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
DocumentContentDispositionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
DocumentTemplateDescriptorXSDLocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
FinalDocumentsNotEditable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
MaximumFileUploadCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
MaximumFileUploadSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
MaximumTotalUploadSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Environment parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
AddressDeletionDelay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
AddressVerificationFailureAsError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
AlwaysShowPhoneWidgetRegionCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
CurrentEncryptionPlugin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
DeprecatedEventGeneration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
EnableAddressVerification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
EnableInternalDebugTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
EntityValidationOrder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
KeyGeneratorRangeSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
MemoryUsageMonitorIntervalMins. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
PublicIDPrefix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
ResourcesMutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
RetainDebugInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
StrictDataTypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
TwoDigitYearThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UnreachableCodeDetection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UnrestrictedUserName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
UseOldStylePreUpdate. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
WarnOnImplicitCoercion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
WebResourcesDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
Contents 5
Configuration Guide 9.0.5
6
Configuration Guide 9.0.5
LastPaymentReminderPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
RecoveryDeniedPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
Miscellaneous parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
ClaimLossDateDemarcation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
ConsistencyCheckerThreads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
EnableClaimNumberGeneration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
EnableClaimSnapshot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
EnableStatCoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
MaintainPolicyValidationLevelOnPolicyChange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
MaxCachedClaimSnapshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
MaxStatCodesInDropdown. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
ProfilerDataPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
VendorNotificationAPIRetryTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
TransactionIdPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .77
PDF print settings parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
DefaultContentDispositionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintFontFamilyName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintFOPUserConfigFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintHeaderFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintLineHeight. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
PrintListViewBlockSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintListViewFontSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginBottom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMarginTop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintMaxPDFInputFileSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPageHeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .79
PrintPageWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintPdfDefaultBaseFileExtension. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintPdfMimeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Print settings parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintCsvDefaultBaseFileExtension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintCsvMimeType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
PrintDefaultBaseFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
Scheduler and workflow parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
IdleClaimThresholdDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .80
SchedulerEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
SeparateIdleClaimExceptionMonitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
WorkflowLogDebug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
WorkflowLogPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
WorkflowPurgeDaysOld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
WorkflowStatsIntervalMins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
Search parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
FreeTextSearchEnabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxActivitySearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxBulkInvoiceSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxCheckSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxClaimSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxContactSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxContactDocumentSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxDocTemplateSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82
MaxDuplicateContactSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
MaxNoteSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Contents 7
Configuration Guide 9.0.5
MaxPolicySearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
MaxRecoverySearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
Security parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
EnableDownlinePermissions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
FailedAttemptsBeforeLockout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
LockoutPeriod. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
LoginRetryDelay. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
MaxACLParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
MaxPasswordLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
MinPasswordLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RestrictContactPotentialMatchToPermittedItems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
RestrictSearchesToPermittedItems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
SessionTimeoutSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
UseACLPermissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Segmentation parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
ClaimSegment. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
ClaimStrategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
ExposureSegment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
ExposureStrategy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Service request parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
ServiceRequestAPIMaxDaysKeepActiveWithoutInvoice . . . . . . . . . . . . . . . . . . . . . . . . . . .86
ServiceRequestAPIMaxMessageResults. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
ServiceRequestAPIMaxSearchResults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Statistics, team, and dashboard parameters. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
AddIndexHintForLossDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
AgingStatsFirstDivision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
AgingStatsSecondDivision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
AgingStatsThirdDivision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
CalculateLitigatedClaimAgingStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
DashboardIncurredLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
DashboardShowByCoverage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
DashboardShowByLineOrLoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
DashboardWindowPeriod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
GroupSummaryShowUserGlobalWorkloadStats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
UserStatisticsWindowSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
User interface parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
ActionsShortcut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
AutoCompleteLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
HidePolicyObjectsWithNoCoveragesForLossTypes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .88
HighlyLinkedContactThreshold . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
IgnorePolicyTotalPropertiesValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
IgnorePolicyTotalVehiclesValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
InputMaskPlaceholderCharacter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
ListViewPageSizeDefault . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
MaxBrowserHistoryItems (obsolete) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
MaxChooseByCoverageMenuItems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
MaxChooseByCoverageTypeMenuItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
MaxClaimantsInClaimListViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
MaxTeamSummaryChartUserBars. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
QuickJumpShortcut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
RequestReopenExplanationForTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
ShowCurrentPolicyNumberInSelectPolicyDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
ShowFixedExposuresInLossDetails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
ShowNewExposureChooseByCoverageMenuForLossTypes . . . . . . . . . . . . . . . . . . . . . . . . .90
ShowNewExposureChooseByCoverageTypeMenuForLossTypes . . . . . . . . . . . . . . . . . . . . .91
8
Configuration Guide 9.0.5
ShowNewExposureMenuForLossTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
UISkin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
WebUIAJAXTimeout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
Work queue parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
InstrumentedWorkerInfoPurgeDaysOld . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
WorkItemCreationBatchSize. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
WorkItemPriorityMultiplierSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
WorkItemRetryLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkQueueHistoryMaxDownload. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkQueueThreadPoolMaxSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkQueueThreadPoolMinSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
WorkQueueThreadsKeepAliveTime. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
Part 2
The Guidewire development environment
3 Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
What Is Guidewire Studio? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
The Studio development environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
Working with the QuickStart development server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
Connecting the development server to a database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
Deploying your configuration changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
ClaimCenter configuration files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Key directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Studio and IntelliJ IDEA configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Using Studio with IntelliJ IDEA Ultimate Edition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Setting IntelliJ IDEA properties in Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Studio and the DCEVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Start Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Stop Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Updating Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Enable or disable automatic update checks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Manually check for Studio updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Setting the Studio update site . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Updating Studio manually . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Contents 9
Configuration Guide 9.0.5
Part 3
Guidewire Studio editors
7 Using the Studio editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Editing in Guidewire Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Working in the Gosu editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
10
Configuration Guide 9.0.5
Part 4
Data model configuration
14 Working with the Data Dictionary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
What is the Data Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
What can you view in the Data Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Using the Data Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Property colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Object attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Property attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Entity subtypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Data field types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Virtual properties on data entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Contents 11
Configuration Guide 9.0.5
Contents 13
Configuration Guide 9.0.5
Graph validation errors that prevent the server from starting . . . . . . . . . . . . . . . . . . . . . . . . 337
Graph validation warnings that do not prevent the server from starting. . . . . . . . . . . . . . . . . 338
About archive domain graph errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Resolve archive graph errors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Resolve archive graph warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Resolving issues with custom archive entities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
Defining a cross-domain tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
About archive graph error messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Graph validation errors generated during server startup . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Graph validation errors generated at run time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
About archiving and event messages. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Viewing the archive domain graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Generate the archive domain graph in PDF format. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345
Generate the archive domain graph in PNG format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Using archive logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
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
Configuration Guide 9.0.5
Part 6
Workflow, activity patterns, and email configuration
30 Using the workflow editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Workflow in Guidewire ClaimCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Workflow in Guidewire Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Access the workflow editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
Workflow editor window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Workflow editor elements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
Understanding workflow steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Using the workflow right-click menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Using search with workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
Contents 17
Configuration Guide 9.0.5
Part 7
Testing Gosu code
34 Testing and debugging your configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Testing ClaimCenter with Guidewire Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Running ClaimCenter without debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Debugging ClaimCenter within Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
18
Configuration Guide 9.0.5
Part 8
Guidewire ClaimCenter configuration
36 Configuring policy behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Understanding aggregate limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Aggregate limit data model. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
Defining aggregate limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
Aggregate limit configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
Storing aggregate limit data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Aggregate limit used recalculation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
Advanced aggregate limit configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
The AggregateLimitTransactionPlugin plugin implementation . . . . . . . . . . . . . . . . . . . . . . 551
Example – Configure a claim for aggregate limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
Example – Configure aggregate limits for deductible recoveries . . . . . . . . . . . . . . . . . . . . . 553
Contents 19
Configuration Guide 9.0.5
Contents 21
Configuration Guide 9.0.5
Part 9
Guidewire ClaimCenter financials
54 Configuring ClaimCenter financials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
The financials data model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735
Transactions and cost types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Financials-related typelists. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737
Financial transaction statuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738
Financial configuration parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 739
Batch processes related to checks and payments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
The financials escalation process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740
The TAccounts Escalation process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
The bulk invoice escalation process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 741
Scheduling the financials batch processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 742
Contents 25
Configuration Guide 9.0.5
26
Configuration Guide 9.0.5
Document Purpose
InsuranceSuite Guide If you are new to Guidewire InsuranceSuite applications, read the InsuranceSuite Guide for
information on the architecture of Guidewire InsuranceSuite and application integrations. The
intended readers are everyone who works with Guidewire applications.
Application Guide If you are new to ClaimCenter 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
intended readers are everyone who works with ClaimCenter.
Database Upgrade Guide Describes the overall ClaimCenter upgrade process, and describes how to upgrade your ClaimCenter
database from a previous major version. The intended readers are system administrators and
implementation engineers who must merge base application changes into existing ClaimCenter
application extensions and integrations.
Configuration Upgrade Guide Describes the overall ClaimCenter upgrade process, and describes how to upgrade your ClaimCenter
configuration from a previous major version. The intended readers are system administrators and
implementation engineers who must merge base application changes into existing ClaimCenter
application 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 ClaimCenter versions. Intended readers are business
users and system administrators who want an overview of new features and changes to features.
Consult the “Release Notes Archive” part of this document for changes in prior maintenance releases.
Installation Guide Describes how to install ClaimCenter. The intended readers are everyone who installs the application
for development or for production.
System Administration Guide Describes how to manage a ClaimCenter system. The intended readers are system administrators
responsible 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
interface (PCF) files. The intended readers are all IT staff and configuration engineers.
PCF Reference Guide Describes ClaimCenter PCF widgets and attributes. The intended readers are configuration engineers.
Data Dictionary Describes the ClaimCenter data model, including configuration extensions. The dictionary can be
generated at any time to reflect the current ClaimCenter configuration. The intended readers are
configuration 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 ClaimCenter configuration. The intended readers are
configuration engineers.
Globalization Guide Describes how to configure ClaimCenter for a global environment. Covers globalization topics such as
global regions, languages, date and number formats, names, currencies, addresses, and phone
numbers. The intended readers are configuration engineers who localize ClaimCenter.
Document Purpose
Rules Guide Describes business rule methodology and the rule sets in ClaimCenter Studio. The intended readers
are business analysts who define business processes, as well as programmers who write business
rules in Gosu.
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
ClaimCenter 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 ClaimCenter with
external 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
plugin code in Gosu or Java.
Java API Reference Javadoc-style reference of ClaimCenter 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
language, including for rules and PCF configuration.
Gosu API Reference Javadoc-style reference of ClaimCenter Gosu classes and properties. The reference can be generated
at any time to reflect the current ClaimCenter 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.
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 http://server_name/index.html.
and URLs.
Support
For assistance, visit the Guidewire Community.
28 About ClaimCenter documentation
Configuration Guide 9.0.5
Guidewire Customers
https://community.guidewire.com
Guidewire Partners
https://partner.guidewire.com
Overview of ClaimCenter
configuration
This topic provides some basic information, particularly about the Guidewire ClaimCenter 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 133
Procedure
1. After making configuration changes in your development environment, run one of the build commands from
your development ClaimCenter directory.
For example:
gwb warTomcatDbcp
ClaimCenter/webapps/cc
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, ClaimCenter/dist). The build script
places the new cc.war or cc.ear file in this directory.
5. Copy the newly created cc.war file to the production webapps folder (for Tomcat). If using WebSphere or
WebLogic, use the administrative console to deploy the cc.ear 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.
Next steps
See also
• If working in a clustered server environment, see the System Administration Guide.
ClaimCenter Administration→Utilities→Export Data Security Dictionary “Generating the security dictionary from ClaimCenter”
on page 38
Command prompt gwb genDataDictionary Security Dictionary “Generating the data and security dictionaries in HTML
Data Dictionary format” on page 37
“Generating the data and security dictionaries in XML
format” on page 38
See also
• To understand the Data Dictionary and the information it includes, see “Working with the Data Dictionary” on
page 165.
• To understand the Security Dictionary and the information it includes, see the Application Guide
gwb genDataDictionary
This command generates HTML files for the dictionaries in the following locations:
ClaimCenter/build/dictionary/data
ClaimCenter/build/dictionary/security
To view a dictionary, open its index.html file from the listed locations.
This command generates the following XML and XSD files for the dictionaries:
ClaimCenter/build/dictionary/data/entityModel.xml
ClaimCenter/build/dictionary/data/entityModel.xsd
ClaimCenter/build/dictionary/security/securityDictionary.xml
ClaimCenter/build/dictionary/security/securityDictionary.xsd
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.
Next steps
See also
• Installation Guide
ClaimCenter/modules/configuration/config/import/gen/roleprivileges.csv
IMPORTANT It is possible for the Security Dictionary to become out of synchronization with the actual roles in
your database. Guidewire ClaimCenter bases the Security Dictionary on the file roleprivileges.csv only.
This topic covers the ClaimCenter 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 config.xml file in the base configuration contains all available parameters. To set a parameter, edit the file,
locate the parameter, and change its value. ClaimCenter configuration parameters are case-insensitive. If a parameter
does not appear in the file, Guidewire ClaimCenter 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.
WARN Illegal parameter specified in a local config file (will be ignored): XXXXXXX
Note: For information on server environments in Guidewire ClaimCenter, 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, ClaimCenter 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 ClaimCenter server.
2. In the sidebar, click Info Pages→Configuration.
Result
See the Integration Guide.
gw.api.system.CCConfigParameters
gw.api.system.PLConfigParameters
For example:
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 web.xml configuration file in a series of <mime-
mapping> tags. Verify that the needed MIME type exists in the appropriate file. If necessary, add it.
2. Add the new MIME type to the ClaimCenter config.xml 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. ClaimCenter uses this
information to associate MIME types and file extensions. If retrieving a file extension from a MIME type,
ClaimCenter uses the first extension in the list. If retrieving a MIME type from a file extension,
ClaimCenter 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/cc/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 config.xml <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.
Approval parameters
Guidewire provides the following configuration parameters in the config.xml file related to approval activities.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
BulkInvoiceApprovalPattern
Name of the activity pattern to use if creating bulk invoice approval activities.
Required: Yes
PaymentApprovalPattern
Name of an approval activity pattern to use if creating payment approval activities.
Required: Yes
RecoveryApprovalPattern
Name of the activity pattern to use if creating recovery approval activities.
Required: Yes
RecoveryReserveApprovalPattern
Name of the activity pattern to use if creating recovery reserve approval activities.
Required: Yes
ReserveApprovalPattern
Name of the approval activity pattern to use if creating reserve approval activities.
Required: Yes
Archive parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to archiving.
IMPORTANT Guidewire strongly recommends that you contact Customer Support before you implement archiving.
See also
• “Working with configuration parameters” on page 41
• “Claim archiving” on page 705
• Application 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 ClaimCenter 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, ClaimCenter creates a non-unique index on the ArchivePartition column for Extractable
entities.
Furthermore, if the Extractable entity is Keyable, ClaimCenter creates a unique index on the ID and
ArchivePartition columns.
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
AssignClaimToRetriever
Specifies to whom ClaimCenter assigns a retrieved claim:
• true assigns the claim to the user who retrieved the claim.
• false assigns a retrieved claim to the original group and user who owned it.
If it is not possible to reassign the claim to the original user, ClaimCenter assigns the retrieved claim to the
supervisor of the group. If ClaimCenter cannot reassign the retrieved claim to the original group, ClaimCenter
assigns the claim to defaultowner.
Default: false
DaysClosedBeforeArchive
ClaimCenter bases archive eligibility on the entity.DateEligibleForArchive field. For an archivable entity to be
eligible for archiving, its DateEligibleForArchive property must be a non-null date and time that is not later than
the current system date and time. In general, ClaimCenter calculates the DateEligibleForArchive value using the
following formula:
DateEligibleForArchive = DaysClosedBeforeArchive (in days) + current system date
Default: 30
DaysRetrievedBeforeArchive
Archive parameters 45
Configuration Guide 9.0.5
Used by the implementation of the IArchiveSource plugin in the base configuration to set the
DateEligibleForArchive field on Claim as it retrieves a claim from the archive store. ClaimCenter calculates the
DateEligibleForArchive value using the following formula:
DateEligibleForArchive = DaysRetrievedBeforeArchive (in days) + current system date
Default: 100
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
PolicySystemArchivingEnabled
It is possible to include archived policies in the ClaimCenter Policy Select search and the FNOL wizard Find Policy
search. However, the policy system must retrieve any archived policies before ClaimCenter can use them.
Configuration parameter PolicySystemArchivingEnabled controls whether you can include archived policies in
searches.
This configuration parameter has the following valid settings:
PolicySystemArchivingEnabled Meaning
true The policy search result from both FNOL and policy select excludes archived policies.
false If you also check Include Archived Policies in FNOL policy search or in the policy select screen,
ClaimCenter includes archived policies in the search result. ClaimCenter also does the
following:
• Sets the Address, City, State, and postal code fields to blank for archived policies
• Displays a Status column
Default: false
RestorePattern
Code of the activity pattern that ClaimCenter uses to create retrieval activities. Upon retrieving a claim, ClaimCenter
creates two activities:
• One activity for the retriever of the claim
• One activity for the assigned user of the claim, if different from the retriever
Default: restore
SnapshotEncryptionUpgradeChunkSize
Limits the number of claim snapshots that ClaimCenter upgrades during a change to the encryption plugin or during
a change to encrypted fields. Set this parameter to 0 to disable the limit.
Default: 50000
Assignment parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to assignment.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
AssignmentQueuesEnabled
Whether to display the ClaimCenter 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
WeightedAssignmentEnabled
Whether to enable assignment load balancing.
Default: false
WeightedAssignmentGlobalDefaultWeight
The global default weight of all assignable entities that do not match any classifications.
Default: 10
Minimum: 0
BatchProcessHistoryPurgeDaysOld
Number of days to retain batch process history before ClaimCenter deletes it.
Default: 45
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
Assignment parameters 47
Configuration Guide 9.0.5
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 ClaimCenter to manage the
official designation of holidays. Guidewire retains this configuration parameter to facilitate upgrade from older
versions of ClaimCenter.
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.
48 chapter 2 Application configuration parameters
Configuration Guide 9.0.5
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
MinAllowedDate
The earliest date allowed to be used.
Default: 1800-01-01
Set For Environment: Yes
BizRulesCacheStaleTimeMinutes
Time (in minutes) that ClaimCenter retains rule data in the RuleVersion cache before it considers cached items to
be stale and thus eligible for reaping.
ClaimCenter 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
BizRulesEnabled
Determines whether ClaimCenter enables the use of activity business rules. If set to true, ClaimCenter displays the
Business Rules screens in the Administration tab to users with the appropriate privileges.
Default: true
BizRulesDeploymentEnabled
Determines whether it is necessary to explicitly deploy a business rule before ClaimCenter 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, ClaimCenter evaluates all enabled and valid rules at runtime, including rules in the draft state.
ClaimCenter ignores this parameter if the value of parameter BizRulesEnabled is false.
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 a startup error and refuses to start.
ClaimCenter ignores this configuration parameter if the value of BizRulesDeploymentEnabled is false.
ClaimCenter 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.
It is possible to change the value of this parameter through a server restart. However, if you change the value of
BizRulesDeploymentId, ClaimCenter does not update already deployed rule versions.
Default: None
See also
• System Administration Guide
BizRulesImportBootstrapRules
Whether ClaimCenter 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.
office.ConferenceRooms[0].Table.PhoneNumber
Default: 3
OnlineJavadocPrefix
Prefix to a URL for Javadoc. Override the default URL to point a different Javadoc location, for example, to a local
Javadoc instance.
IMPORTANT Do not use file protocol to define this value due to JavaScript security issues.
Default: https://docs.oracle.com/javase/8/docs/api/
Cache parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to the application
cache.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
See also
• System Administration Guide
ActivityPatternCacheMaxDuration
Upper bound on how long caches of activity pattern entities are allowed to exist without refresh, measured in
seconds.
Default: 86400
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 ClaimCenter 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 ClaimCenter 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
GlobalCacheDetailedStats
Configuration parameter GlobalCacheDetailedStats determines whether to collect detailed statistics for the global
cache. Detailed statistics are data that ClaimCenter collects to explain why items are evicted from the cache.
ClaimCenter 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 ClaimCenter Management Beans page to enable the collection of detailed statistics for the global
cache. If you disable the GlobalCacheDetailedStats parameter, ClaimCenter 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 ClaimCenter considers cached items to be eligible for reaping. You can
think of this as the period during which ClaimCenter 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 ClaimCenter 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
GlobalCacheStatsRetentionPeriodDays
Time period (in days), in addition to today, for how long ClaimCenter 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). ClaimCenter uses this parameter for the following purposes:
• To define the period of time to preserve the reason for which ClaimCenter evicts an item from the cache, after the
event occurred. If a cache miss occurs, ClaimCenter 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 ClaimCenter 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
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
HeatMapCredential
Set this configuration parameter to the value you obtained during the licensing process for the Bing Maps Ajax
Control.
Default: None
HeatMapServiceTemplate
Set to the fully qualified path to the class that manages the Bing map configuration.
Default: gw.api.heatmap.BingMap
MaxCatastropheClaimFinderSearchResults
Maximum number of claims that ClaimCenter relates to a single catastrophe in the CatClaimFinder batch process,
(used to find catastrophe-related claims). See the System Administration Guide for a discussion of ClaimCenter
batch processes.
Default: 1000
ClaimHealthCalcMaxLossDateInYears
Maximum number of years to look back to find claims on which to calculate metrics and indicators. This parameter
strictly limits the number of claims found for the ClaimHealthCalcuation batch process.
Default: 2
InitialReserveAllowedPeriod
Number of days that new initial reserves contribute to the initial reserve sum of the Percent * Reserve Change
Claim Metric calculation after ClaimCenter creates the first initial reserve. An initial reserve is a reserve that
ClaimCenter creates during creation of a claim or exposure. It is also the first set of reserves that ClaimCenter
creates on the claim or exposure if there are no previous reserves for those entities.
Default: 3
MaxClaimResultsPerClaimHealthCalcBatch
Maximum number of claims for each invocation of the ClaimHealthCalculation batch process to calculate metrics
and indicators. This parameter strictly limits the number of claims that can be processed at a single time. The
ClaimHealthCalculation batch process calculates the claim metrics and indicators for found claims.
Default: 1000
Clustering parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to the application
clusters.
To improve performance and reliability, you can install multiple ClaimCenter servers in a configuration known as a
cluster. A cluster distributes client connections among multiple ClaimCenter servers, reducing the load on any one
server. If one server fails, the other servers transparently handle its traffic.
For information on editing config.xml 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.
ClusterMemberPurgeDaysOld
The number of days to keep cluster member records before they can be deleted.
Default: 30
Minimum value: 1
Required: true
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.
WARNING Guidewire does not support disabling this parameter in a production environment. Do not set this
parameter to false unless specifically instructed to do so by Guidewire Support.
Default: true
Set for Environment: Yes
Clustering parameters 55
Configuration Guide 9.0.5
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 ClaimCenter 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, ClaimCenter 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, ClaimCenter 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:
• serialization-whitelist.lst
• serialization-blacklist.lst
The Server Tools Serialization Info screen (under Info Pages) provides a means of monitoring the deserialization of Java
classes.
Default: false
See also
• System Administration Guide
Database parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to the application
database.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
DisableHashJoinForClaimSearch
Guidewire provides a workaround for query plan problems related to hash joins that occur if executing certain claim
searches on Oracle. This parameter controls part of the workaround. The parameter has no effect on databases other
than Oracle. See also DisableSortMergeJoinForTeamGroupActivities.
Default: true
DisableHashJoinForTeamGroupActivities
ClaimCenter works around hash join-related query plan problems while executing the team group activities page's
main query on Oracle. This parameter controls part of the work around and is true by default. This parameter has
no effect on databases other than Oracle.
Default: true
DisableIndexFastFullScanForClaimSearch
ClaimCenter works around some bad execution plans by disabling index fast full scan while executing certain claim
searches on Oracle. This parameter controls the work around and is true by default. If a future version of Oracle
fixes the defect, you can safely remove this parameter. The parameter affects the Oracle database only.
Default: true
DisableIndexFastFullScanForRecoverySearch
ClaimCenter works around some bad execution plans by disabling index fast full scan while executing certain
recovery searches on Oracle. This parameter controls the work around and is true by default. If a future version of
Oracle fixes the defect, you can safely remove this parameter. The parameter affects the Oracle database only.
Default: true
DisableIndexFastFullScanForTeamGroupActivities
ClaimCenter works around index fast full scan related query plan problems while executing the Team Group Activities
page's main query on Oracle. This parameter controls the work around and is true by default. If a future version of
Oracle fixes the defect, you can safely remove this parameter. The parameter has no effect on databases other than
Oracle.
Default: true
DisableSequenceUtil
Disables the sequence utility class gw.api.system.database.SequenceUtil. Use this to ensure that any sequences
in your code use some alternative mechanism for sequenced identifiers.
Default: false
DisableSortMergeJoinForClaimSearch
Guidewire provides a work-around for sort-merge join query plan problems that occur if executing certain claim
searches on Oracle. This parameter controls part of the work-around if DisableHashJoinForClaimSearch is also
set to true. The parameter has no effect on databases other than Oracle.
Default: true
DisableSortMergeJoinForTeamGroupActivities
ClaimCenter works around sort merge join query plan problems while executing the team group activities page's main
query on Oracle. This parameter controls part of the workaround if the value of DisableHashJoinForClaimSearch
is set to true. It is true by default. The 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:
Database parameters 57
Configuration Guide 9.0.5
/* applicationName:ProfilerEntryPoint */
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 */
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
QueryRewriteForClaimSearch
Determines whether ClaimCenter rewrites queries using a materialized view or lets the Oracle optimizer make the
choice based on the cost calculation. The following list describes the valid values for this parameter.
Value Meaning
FORCE/STALE Oracle attempts to rewrite the query using an appropriate materialized view even if the optimizer cost
estimate is high. Oracle allows the rewrite even if the data in the materialized is not the same as in the base
tables.
FORCE/NOSTALE Oracle attempts to rewrite the query using an appropriate materialized view even if the optimizer cost
estimate is high. Oracle ignores the materialized view if the data in the view is not fresh.
COST/STALE If the Oracle cost-based optimizer evaluates the rewrite to be cheaper than other plans, it uses the
materialized view. If it is costlier to execute the rewritten path, then Oracle performs a join of the base
tables. The rewrite can happen even if the data in the view is stale.
COST/NOSTALE If the Oracle cost-based optimizer evaluates the rewrite to be cheaper than other plans, it uses the
materialized view. If it is costlier to execute the rewritten path, then Oracle performs a join of the base
tables. If the data in the view is not fresh, Oracle ignores the view and performs the join on the base tables.
SetSemiJoinNestedLoopsForClaimSearch
(Oracle only) ClaimCenter works around semi-join query plan problems by forcing nested loop semi-join queries
while executing certain claim searches on Oracle. This parameter controls part of the work-around, and has no effect
on databases other than Oracle.
Default: true
UseOracleHintsOnMessageQueries
An Oracle database can experience improved performance if Oracle hints are used on queries for Message objects.
This parameter effects Oracle databases only.
Default: true
ArchiveReferenceTrackingEnabled Parameter
When archiving is enabled, you must set this parameter to true to enable tracking of archived objects for personal
data destruction. This parameter must also be set to true before you run the ArchiveReferenceTrackingSync
batch process to build the table of objects that you have already archived.
In the base configuration, this parameter is false.
ContactDestructionRequestAgeForPurgingResults parameter
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
• “RemoveOldContactDestructionRequest work queue” on page 717
PersonalDataDestructionEnabled parameter
Set this parameter to true to enable destruction of personal data. In the base configuration, this parameter is false.
Deduction parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to deductions.
Database parameters 59
Configuration Guide 9.0.5
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
BackupWithholdingTypeCode
The typecode in the DeductionType typelist for backup withholding. The default is irs. You must define this
parameter for the backup withholding plugin to work. Also, this parameter must also correspond to a valid
DeductionType typecode.
Default: irs
CalculateBackupWithholdingDeduction
Whether ClaimCenter calculates backup withholding for applicable checks.
Default: true
StandardWithholdingRate
Standard backup withholding rate, as defined by the U.S. Internal Revenue Service, for use by the backup
withholding plugin. The number is a percentage. (For example, 28.0 means 28.0 percent.) The backup withholding
plugin does not work if you do not define this parameter.
Default: 28.0
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 ClaimCenter returns document content directly to the
browser. Supported settings are inline and attachment.
Default: inline
DocumentTemplateDescriptorXSDLocation
The path to the XSD file that ClaimCenter 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: 25 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: 25 MB
Environment parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to the application
environment.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
AddressDeletionDelay
Sets the amount of time to wait (in minutes) before an AddressDeleteWorkQueue work item deletes an address
marked as potentially orphaned. During an entity bundle commit, it is possible for an address to become orphaned if
there is no longer an entity that points to the address.
ClaimCenter manages the AddressDeleteWorkQueue work queue internally. It is not possible to either schedule this
work queue or to run it from the ClaimCenter user interface.
Default: 1
See also
• System Administration Guide
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, ClaimCenter 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 ClaimCenter 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 135.
• Integration Guide
DeprecatedEventGeneration
Whether to use the now-deprecated event logic that had previously been available.
Default: false
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, ClaimCenter
shows a warning message if verification against zone data fails.
• If EnableAddressVerification is true and AddressVerificationFailureAsError is true, ClaimCenter
shows an error message if verification against zone data fails.
• If EnableAddressVerification is false, ClaimCenter 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
EntityValidationOrder
Order in which to execute validation if validating multiple entities. ClaimCenter validates all other validatable
entities not specified in this list after all listed entities, in no particular order.
Note: Guidewire does not guarantee that ClaimCenter validates entities of a given type (such as the exposures on a
claim) in any deterministic order with respect to one another.
Default: Policy, Claim, Exposure, Matter, TransactionSet
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 ClaimCenter object such as a Claim, ClaimCenter assigns it a key, or unique public identifier.
To ensure that keys are unique, the server requests an available key from the ClaimCenter 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 ClaimCenter 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 config.xml.
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.
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
Environment parameters 63
Configuration Guide 9.0.5
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 64.
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 55
RetainDebugInfo
Whether the production server retains debugging information. This parameter facilitates debugging from Studio
without a type system refresh.
• If set to true, ClaimCenter 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
See also
• “ResourcesMutable” on page 64
StrictDataTypes
Controls whether ClaimCenter uses the pre-ClaimCenter 6.0 behavior for configuring data types, through the use of
the fieldvalidators.xml 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 useful for new ClaimCenter installations that want
to implement the new behavior.
StrictDataTypes = true
If you set the StrictDataTypes value to true, then ClaimCenter:
• Does not permit decimal values to exceed the scale required by the data type. The setter throws a
gw.datatype.DataTypeException 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 ClaimCenter user interface and in the field setter.
• Validates numeric range constraints in both the ClaimCenter user interface and in the field setter.
StrictDataTypes = false
If you set the StrictDataTypes value to false, then ClaimCenter:
• 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, ClaimCenter 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, ClaimCenter uses the su user as the user with unrestricted permissions to do anything in ClaimCenter.
To set the unrestricted user to a different user, set the value of the UnrestrictedUserName parameter to that user’s
login name.
Default: su
Environment parameters 65
Configuration Guide 9.0.5
UseOldStylePreUpdate
Determines whether to apply the pre-update rule set prior to committing a bundle.
Default: true
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 config.xml file to help configure how ClaimCenter works with
monetary amounts.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
See also
• “Configuring ClaimCenter financials” on page 735
• “ClaimCenter financial calculations” on page 743
• “Configuring multicurrency” on page 697
• Application Guide
• Globalization Guide
AllowMultipleLineItems
Whether to allow multiple line items in a transaction. See also UseDeductibleHandling.
Default: true
AllowMultiplePayments
Whether to allow a single check to reflect multiple payments.
Default: true
AllowNegativeManualChecks
Use to set the ability to create negative checks manually. The following values are valid:
• true – Allow user to create negative checks manually.
• false – Disable the ability to create negative checks manually.
The default ClaimCenter behavior is to not allow manual checks to be negative. If you need the ability to create
negative checks manually, then you must explicitly set this parameter to true.
Default: false
AllowNoPriorPaymentSupplement
Whether to allow a user to create supplemental payments on a closed claim or exposure with no prior payments.
Default: false
AllowPaymentsExceedReservesLimits
If true, a user can submit payments that exceed available reserves up to the amount limited by the
paymentsexceedreserves authority limits. Otherwise, ClaimCenter does not allow partial or final payments that
exceed reserves.
Default: false
CheckAuthorityLimits
Controls whether ClaimCenter checks authority during approval processing of a TransactionSet.
Default: true
CloseClaimAfterFinalPayment
If true, ClaimCenter attempts to automatically close a claim if a final payment closes the last open exposure.
Default: true
CloseExposureAfterFinalPayment
If true, ClaimCenter attempts to automatically close the exposure of a Final payment when that payment's Check is
escalated.
Default: true
EnableMulticurrencyReserving
Whether to enable multicurrency reserving support. Note that this parameter is not intended to be used by non-Gosu
classes, or to be accessed directly; use CCConfigUtil.EnableMulticurrencyReserving instead.
You must set this parameter to true if you set MulticurrencyDisplayMode to MULTIPLE.
Default: false
Set for Environment: Yes
Financials
Specifies the level of financials functionality that is available in the application. Available options are view for read-
only values or entry to enable editing the financial values directly in ClaimCenter.
ClaimCenter supports the following values:
Value Description
entry financials entry
view financials view (read-only)
Default: entry
Financial parameters 67
Configuration Guide 9.0.5
PaymentLogThreshold
ClaimCenter logs payments greater than this threshold. This integer value must be 0 or greater.
Default: 500
Dynamic: Yes
PaymentRoundingMode
Use to set the rounding mode for conversion of amounts among TransactionAmount, ClaimAmount, and
ReportingAmount columns on the TransactionLineItem entity for Payment transactions. The available choices are
a subset of those supported by java.math.RoundingMode, 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:
gw.api.util.CCCurrencyUtil.getRoundingMode(Payment)
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
See also
• Globalization Guide
ReserveRoundingMode
Use to set the rounding mode for conversion of amounts among TransactionAmount, ClaimAmount, and
ReportingAmount columns on the TransactionLineItem entity for Reserve transactions.
The available choices are a subset of those supported by java.math.RoundingMode, namely:
• UP
• DOWN
• CEILING
• FLOOR
• HALF_UP
• HALF_DOWN
• HALF_EVEN
gw.api.util.CCCurrencyUtil.getRoundingMode(Reserve)
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
See also
• Globalization Guide
SetReservesByTotalIncurred
Specifies the way in which you modify reserves in the ClaimCenter interface.
• If set to true, the user can set the Total Incurred values
• If set to false, the user can set the Available Reserves values.
Default: false
UseDeductibleHandling
Whether to use deductible handling. If this value is true, then AllowMultipleLineItems must be true as well.
Default: true
See also
• Application Guide
UseRecoveryReserves
Whether to use recovery reserve transactions in financial calculations. If you set this parameter to false, and then
later set it back to true, consider creating offsetting recovery reserves for your existing recoveries. In addition,
changing the parameter from false to true generates database consistency check errors, which you may ignore.
Default: true
Geocoding parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to geocoding.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
UseGeocodingInPrimaryApp
If true, ClaimCenter enables proximity search for users in the assignment user interface. ContactManager does not
respond to this parameter.
Default: false
Financial parameters 69
Configuration Guide 9.0.5
UseGeocodingInAddressBook
Set to true if you have ClaimCenter integrated with ContactManager and ContactManager has geocoding enabled
for vendors. This setting enables vendor search in the ClaimCenter and ContactManager user interfaces.
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
IMPORTANT If the setting for this configuration parameter differs between ContactManager and ClaimCenter, it is
possible for the application to display distance-related messages incorrectly. Additionally, the search can return
results that are farther away than the distance specified.
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. This parameter does not have to match
the value of the corresponding parameter in the ContactManager config.xml file.
Default: 1000
UseMetricDistancesByDefault
If true, ClaimCenter uses kilometers and metric distances instead of miles and United States distances for driving
distance or directions. Set this parameter identically in both ClaimCenter and ContactManager.
Default: false
Globalization parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to globalization.
For information on editing config.xml 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 ClaimCenter with a single currency. Guidewire
applications which share currency values must have the same DefaultApplicationCurrency setting in their
respective config.xml files. The default currency is sometimes known as the reporting currency.
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 money and currency amount calculations.
The available choices are a subset of those supported by java.math.RoundingMode, 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:
gw.api.util.CurrencyUtil.getRoundingMode()
Globalization parameters 71
Configuration Guide 9.0.5
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
See also
• “PaymentRoundingMode” on page 68
• “ReserveRoundingMode” on page 68
• Globalization Guide
MulticurrencyDisplayMode
Determines whether ClaimCenter displays currency selectors for monetary values. The following are the allowed
values for MulticurrencyDisplayMode:
• SINGLE
• MULTIPLE
In the base configuration of ClaimCenter, 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
DefaultCountryCode
The default ISO country code that ClaimCenter uses if the country for an address is not set explicitly. ClaimCenter
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:
https://www.iso.org/obp/ui
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 nanpa.properties 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 config.xml file that relate to how multiple
Guidewire applications integrate with each other.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
ContactAutoSyncBundleCommitSize
If you integrate ClaimCenter with ContactManager, it is necessary to synchronize contacts stored by the two
Guidewire applications. Batch process ContactAutoSync controls this synchronization.
It is common to have a large number of local instances of each contact in Guidewire ClaimCenter, one for each
claim that uses that contact. To improve the performance of synchronizing the ClaimCenter contacts that match a
single AddressBookUID, the parameter ContactAutoSyncBundleCommitSize specifies the maximum number of
contacts in a single bundle commit.
Note: Parameter ContactAutoSyncBundleCommitSize is meaningful only if ClaimCenter is integrated with
ContactManager.
Default: 15
See also
• “ContactAutoSyncWorkItemChunkSize” on page 73
• Guidewire Contact Management Guide
ContactAutoSyncWorkItemChunkSize
If you integrate ClaimCenter with ContactManager, it is necessary to synchronize the contacts stored by the two
Guidewire applications. Batch process ContactAutoSync controls this synchronization.
It is common to have a large number of local instances of each contact in Guidewire ClaimCenter, one for each
claim that uses that contact. During contact synchronization between ClaimCenter and ContactManager,
ClaimCenter processes the table for highly linked contacts. If the number of contacts linked to a single
AddressBookUID is greater than the value of ContactAutoSyncWorkItemChunkSize, ClaimCenter divides these
contacts into smaller groups of contacts. This process is known as chunking. ClaimCenter then creates a work item
to process each chunk of contacts.
Note: Parameter ContactAutoSyncWorkItemChunkSize is meaningful only if ClaimCenter is integrated with
ContactManager.
Default: 400
See also
• “ContactAutoSyncBundleCommitSize” on page 73
• Guidewire Contact Management Guide
DefaultXmlExportIEncryptionId
The unique encryption ID of an encryption plugin. If archiving is enabled, ClaimCenter uses the encryption plugin
to encrypt any encrypted fields during XML serialization.
Default: null (no encryption)
EnableMetroIntegration
Whether to enable Metropolitan Reporting Bureau integration. If true, there is a working integration that sends
messages from ClaimCenter to the Metropolitan Reporting Bureau service (requesting Metropolitan reports).
Default: false
Integration parameters 73
Configuration Guide 9.0.5
InstantaneousContactAutoSync
Whether to process contact automatic synchronization in ClaimCenter at the time of receiving the notification:
• If you set InstantaneousContactAutoSync to false, ClaimCenter synchronizes contacts only while running
the ContactAutoSync batch process.
• If you set InstantaneousContactAutoSync to true, the ContactAutoSync worker activates automatically as
ClaimCenter receives autosync events and immediately updates all ClaimCenter copies of a contact stored in
ContactManager.
Default: true
See also
• Guidewire Contact Management Guide
ISOPropertiesFileName
Name of the ISO properties file in the ClaimCenter/modules/configuration/config/iso configuration
directory.
Default: ISO.properties
Set for Environment: Yes
KeepCompletedMessagesForDays
Number of days after which ClaimCenter 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.
Default: true
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.
MetroPropertiesFileName
Name of the Metropolitan properties file in the ClaimCenter/modules/configuration/config/metro
configuration directory. ClaimCenter uses this files to set up fields in the XML messages sent to the Metropolitan
Reporting Bureau. See EnableMetroIntegration as well.
Default: Metro.properties
Set for Environment: Yes
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
PolicySystemURL
URL to use in ClaimCenter ExitPoint PCF pages that view items in the policy system.
• If integrating Guidewire ClaimCenter with Guidewire PolicyCenter, then set this parameter to the PolicyCenter
base URL (for example, http://server/pc). In this case, the exit points add the appropriate PolicyCenter entry
point.
• If integrating with a non-Guidewire policy 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 ClaimCenter hides the buttons in the interface
that take you to the exit points.
Default: Empty string
See also
• Integration Guide
BulkInvoiceItemValidationFailedPattern
Name of the activity pattern to use in creating an activity to alert about a failure during processing of a bulk invoice
item.
Required: Yes
BulkInvoiceUnableToStopPattern
Name of the activity pattern to use if creating an activity to alert that ClaimCenter was unable to stop a bulk invoice.
More technically, it was not possible to update the status from Pending-stop or Stopped to Issued or Cleared.
Required: Yes
BulkInvoiceUnableToVoidPattern
Name of the activity pattern to use in creating an activity to alert that ClaimCenter was unable to void a bulk
invoice. More technically, it was not possible to update the status from Pending-void or Voided to Issued or
Cleared.
Required: Yes
Integration parameters 75
Configuration Guide 9.0.5
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
CheckDeniedPattern
Name of the activity pattern to use if creating an alert that a down-stream system has denied a check.
Required: Yes
CheckUnableToStopPattern
Name of the activity pattern to use if creating an alert that ClaimCenter cannot stop a check.
Required: Yes
CheckUnableToVoidPattern
Name of the activity pattern to use if creating an alert that ClaimCenter cannot void a check.
Required: Yes
ClaimOrExposureUnableToClosePattern
Name of the activity pattern to use if a claim or an exposure cannot be closed.
Required: Yes
LastPaymentReminderPattern
Name of the activity pattern to use if creating an alert to signal the approach of the last payment in a set of
recurrence checks.
Required: Yes
RecoveryDeniedPattern
Name of the activity pattern to use if creating an alert that a down-stream system has denied a recovery.
Required: Yes
Miscellaneous parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to various
miscellaneous application features.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
ClaimLossDateDemarcation
Default time for a claim’s loss date when it is not specified in the FNOL. Set this to match the default time at which
the policy administration system sets the effective date of the policy.
Default: 12:00 AM
Set for Environment: Yes
ConsistencyCheckerThreads
Number of threads to use when running the consistency checker.
Default: 1
EnableClaimNumberGeneration
Whether to enable automatic claim number generation (through an external plugin). If you enable claim number
generation, then you must also provide an external Claim Number Generator plugin. If enabled, claim number
generation must succeed in order for a claim to be added through either the New Claim wizard or the integration
tools. This does not affect claims added through staging tables.
Default: true
EnableClaimSnapshot
Whether to create snapshots for imported and created claims. The claim snapshot contains a version of the claim
data before any automated processing by ClaimCenter.
Default: true
EnableStatCoding
Whether to enable statistical coding support.
Default: true
MaintainPolicyValidationLevelOnPolicyChange
If true, any time that you change or refresh the policy for a claim, ClaimCenter validates the new policy at the level
of the old policy. If false, ClaimCenter validates the new policy at the newloss level. In either case, a validation
failure causes ClaimCenter to revert the policy refresh or change.
Default: true
MaxCachedClaimSnapshots
Limits the number of claim snapshots that ClaimCenter caches in memory. This integer value must be 0 or greater,
but less than ten (10).
Default: 3
Minimum: 0
Maximum: 10
MaxStatCodesInDropdown
Maximum number of statistics codes to show in the statistics code picker drop-down.
Default: 20
ProfilerDataPurgeDaysOld
Number of days to keep profiler data before ClaimCenter deletes it.
Default: 30
VendorNotificationAPIRetryTime
Amount of time (in seconds) to wait before attempting to retry a Vendor Notification Message that failed validation.
Default: 10
Set For Environment: Yes
TransactionIdPurgeDaysOld
Number of days to keep external transaction ID records before they can be deleted.
Miscellaneous parameters 77
Configuration Guide 9.0.5
Default: 30
DefaultContentDispositionMode
The Content-Disposition header setting to use when ClaimCenter 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.
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:
http://xmlgraphics.apache.org/fop/
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\fop.xconf
http://xmlgraphics.apache.org/fop/
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.
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, ClaimCenter 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-negative A non-negative value limits the size of the XML input file to the set value (in megabytes). If a user attempts to
print a PDF file that is larger in size than this value, ClaimCenter 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
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
IdleClaimThresholdDays
ClaimCenter schedules claims that have not been touched (including edits or exception checks) for this many days
for exception detection. This integer value must be 0 or greater.
Default: 7
Dynamic: Yes
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
SeparateIdleClaimExceptionMonitor
If true, run exception monitoring rules for idle cases at a separate time.
Default: true
WorkflowLogDebug
Configuration parameter WorkflowLogDebug takes a Boolean value:
• If set to true, ClaimCenter outputs the ordinary verbose system workflow log messages from the Guidewire
server to the workflow log.
• If set to false, ClaimCenter 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 config.xml file that relate to searching.
For information on editing config.xml 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→Claims→Search by Contact screen, which uses free-text search.
Default: false
See also
• “Free-text search configuration parameters and files” on page 414
MaxActivitySearchResults
Maximum number of activities that ClaimCenter returns in a search. If the number to return is greater than this
value, ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 300
MaxBulkInvoiceSearchResults
Maximum number of bulk invoices that ClaimCenter returns in a search. If the number to return is greater than this
value, ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 300
MaxCheckSearchResults
Maximum number of checks that ClaimCenter returns in a search. If the number to return is greater than this value,
ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 300
MaxClaimSearchResults
Maximum number of results that ClaimCenter returns for a claim search. This integer value must be 1 or greater. If
the number or results to return is greater than this value, ClaimCenter prompts the user to narrow the search
parameters.
Default: 300
MaxContactSearchResults
Maximum number of contacts that ClaimCenter returns in a search. If the number to return is greater than this value,
then ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 300
MaxContactDocumentSearchResults
The maximum number of contact documents search results retrieved from ContactManager.
Default: 100
MaxDocTemplateSearchResults
Maximum number of document templates that ClaimCenter returns in a search. If the number to return is greater
than this value, then ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or
greater.
Default: 50
MaxDuplicateContactSearchResults
Maximum number of duplicate results to return from a contact search. This integer value must be 0 or greater.
Default: 25
MaxNoteSearchResults
Maximum number of notes that ClaimCenter returns in a search. If the number to return is greater than this value,
ClaimCenter prompts the user to narrow the search parameters. This integer value must be 0 or greater. A value of 0
indicates that there is no limit on the search.
Default: 25
MaxPolicySearchResults
Maximum number of policies that ClaimCenter returns in a search. If the number to return is greater than this value,
then ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 25
MaxRecoverySearchResults
Maximum number of policies that ClaimCenter returns in a search. If the number to return is greater than this value,
then ClaimCenter prompts the user to narrow the search parameters. This integer value must be 1 or greater.
Default: 300
Security parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to application security.
For information on editing config.xml 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
FailedAttemptsBeforeLockout
Number of failed attempts that ClaimCenter 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 ClaimCenter locks a user account. A value of -1 indicates that a system administrator must
manually unlock a locked account.
Default: -1
Search parameters 83
Configuration Guide 9.0.5
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
MaxACLParameters
Maximum number of users and groups to directly include in search queries that check the claim access control list.
Beyond this maximum limit, ClaimCenter stores users and groups in database tables. You must then use an
additional join in the query to check the claim access control list.
Checking the claim access control list can involve a large number of groups and users. For example, if
EnableDownlinePermissions is true, someone who supervises many groups and users has access to control lists
that contain any of their supervisees. Including all these groups and users in the query can be done directly by
including them as parameters to the query. Or, you can store them in database tables and doing extra joins in the
query.
For small numbers of groups and users, direct parameters are the best choice. For large numbers, in the range of
thousands, the extra join can be better. This parameter, MaxACLParameters, determines the point at which the query
code switches from using direct parameters to using extra joins.
The MaxACLParameters can take the following values:
• A value of -1 or less – Instructs ClaimCenter to use the appropriate default for the current database. Thus,
ClaimCenter chooses the best value, as determined by Guidewire performance testing, for the current type of
database.
• A value of 0 – Instructs ClaimCenter to always use parameters, and to never use a join in a query. This works
even for very large numbers of groups and users, 3000 or more, on an Oracle database. However, it is not suitable
for the SQL Server database, which limits the total number of parameters to 2100.
• A value of +1 or greater – Instructs ClaimCenter to use that value as a threshold. If the number of groups and
users is less than the threshold, then a query uses parameters. If the number is larger the threshold, a query uses
database tables and extra joins. Guidewire strongly recommends that you do not use a positive value for the
Oracle database. This is because the Oracle database can cope with large numbers of parameters, but tends to
choose very bad query plans for the extra joins.
In summary, Guidewire recommends that most ClaimCenter installations use the default value of -1, which chooses
the best value for the current database type.
Database Notes
SQL Server For those ClaimCenter installations that use SQL Server as the database, Guidewire recommends the following:
• Do not set this value to 0.
• Do not set it to any value greater than approximately 2000 due to the risk of hitting the 2100 parameter limit.
Oracle For those ClaimCenter installations that use the Oracle database. Guidewire expressly recommends that you do
not use positive values due to the risk of bad query plans.
Default: -1
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 ClaimCenter does not
require a password. (Guidewire does not recommend this.)
Default: 8
Minimum: 0
RestrictContactPotentialMatchToPermittedItems
Whether ClaimCenter restricts the match results from a contact search screen to those that the user has permission to
view.
Default: true
RestrictSearchesToPermittedItems
Whether ClaimCenter 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 ClaimCenter 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
UseACLPermissions
Whether to use the ACL permission model.
• If false, the privilege that a user holds applies to every claim.
• If true, the ClaimAccess table controls claim access.
Default: true
Segmentation parameters
Guidewire provides the following configuration parameters in the config.xml file that relate to claim and exposure
segmentation.
For information on editing config.xml and setting configuration parameters, see “Working with configuration
parameters” on page 41.
ClaimSegment
Default value to set the Segment field to on a claim, if ClaimCenter cannot determine another segment.
Required: Yes
Security parameters 85
Configuration Guide 9.0.5
ClaimStrategy
The default value to set the Strategy field to on a claim, if ClaimCenter cannot determine another strategy.
Required: Yes
ExposureSegment
Default value to set the Segment field to on an exposure, if ClaimCenter cannot determine another segment.
Required: Yes
ExposureStrategy
Default value to set the Strategy field on an exposure, if ClaimCenter cannot determine another strategy.
Required: Yes
ServiceRequestAPIMaxDaysKeepActiveWithoutInvoice
Maximum number of days that a service request will be considered active by the ServiceRequestAPI when it is
work complete but has no valid invoices.
Default: 90
Set For Environment: Yes
ServiceRequestAPIMaxMessageResults
Maximum number of service request messages returned through the ServiceRequestAPI web service.
Default: 50
Set For Environment: Yes
ServiceRequestAPIMaxSearchResults
Maximum number of service requests returned by a search performed through the ServiceRequestAPI web service.
Default: 250
Set For Environment: Yes
AddIndexHintForLossDate
Applies only when running on an Oracle database. When true, improves the performance of a particular database
query that is executed on the Desktop Activities screen. This parameter enables a database hint on the index
Claim.claimu7u. Therefore, if you modify this index, then you may have better performance on the Desktop
Activities screen by setting this parameter to false, thereby disabling the hint.
Default: true
AgingStatsFirstDivision
Number of days to use in calculating the first claim aging bucket. This bucket includes claims between 0 and
AgingStatsFirstDivision days old. This integer value must be 0 or greater.
Default: 30
AgingStatsSecondDivision
Number of days to use in calculating the second claim aging bucket. This bucket includes claims between
AgingStatsFirstDivision + 1 and AgingStatsSecondDivision days old. This integer value must be 0 or
greater.
Default: 60
AgingStatsThirdDivision
Number of days to use in calculating the third claim aging bucket. This bucket includes claims between
AgingStatsSecondDivision + 1 and AgingStatsThirdDivision days old. The last bucket includes all claims
older than AgingStatsThirdDivision days. This integer value must be 0 or greater.
Default: 120
CalculateLitigatedClaimAgingStats
Whether to show the number of litigated claims on the Aging subtab of the Team tab.
Default: true
DashboardIncurredLimit
Total incurred amount above which ClaimCenter counts the claim as over-the-limit in executive dashboard
calculations.
Default: 1000000
DashboardShowByCoverage
Whether the Dashboard shows claim information subtotaled by coverage.
Default: true
DashboardShowByLineOrLoss
Whether the Dashboard shows claim information subtotaled by line of business or loss type.
Default: true
DashboardWindowPeriod
Number of days to use for executive dashboard calculations that depends on a specific time period.
Default: 30
GroupSummaryShowUserGlobalWorkloadStats
Whether to show individual user global workload statistics along with the standard statistics in the Team Summary
page.
Default: true
UserStatisticsWindowSize
Time window for calculating user statistics. Set this value to the number of previous days to include in the
calculation. For example, set it to 10 to calculate statistics for the last 10 days, including today. You can also set this
parameter to one of the following special values:
Value Description
0 This week, defined as the start of the current business week up to and including today.
-1 This month, defined as the start of the current month up to and including today.
Default: 0
ActionsShortcut
The keyboard shortcut to use for the Actions button.
Default: A
AutoCompleteLimit
The maximum number of autocomplete suggestions to show.
Default: 10
HidePolicyObjectsWithNoCoveragesForLossTypes
It is possible to add a coverage at either the Policy level, or, directly on the covered item (a vehicle, for example).
This parameter applies to coverages applied at the Policy level, rather than those coverages applied to individual
items covered in the policy. It affects the individual coverage submenus in the ClaimCenter Actions→New
Exposure→Choose by Coverage submenu. To remove (hide) empty Vehicle and Property submenus for a specific loss
type, add that loss type to the list.
It is also possible to create this same application behavior by adding a typekey to a typefilter of the same name as
this configuration parameter on the LossType typelist. If you added to the typefilter to modify the behavior of the
New Exposure menu, you can implement this change during a rolling upgrade of the ClaimCenter cluster application
servers. Conversely, if you implement this behavior by modifying file config.xml, then you need to perform a full
database upgrade to implement your changes.
Default: None
HighlyLinkedContactThreshold
Use to improve application performance related to viewing a contact in the ClaimCenter Address Book tab or through
the Claim Summary page. Attempting to view a contact with a large number of links can create performance issues. If
a user is viewing a highly linked contact, then ClaimCenter issues a warning if the user clicks on a card that can
result in an expensive query. The user must click another button before viewing the contact’s related claims,
activities, exposures or matters as these views put a heavy load on the database. This parameter sets the threshold
value for the number of links to a contact that generates the warning.
Note: If you set the threshold value to 0, then ClaimCenter considers no contact to be highly linked.
Default: None
IgnorePolicyTotalPropertiesValue
If true, the policy properties screens suppress the message telling the user whether all of the properties that appear
on the policy have been downloaded to the ClaimCenter policy snapshot.
• Set this value to true if the policy adapter is not capable of returning a meaningful value for
Policy.TotalProperties.
• Set this value to false otherwise.
Default: false
IgnorePolicyTotalVehiclesValue
If true, the policy vehicles screens suppress the message telling the user whether all of the vehicles that appear on
the policy have been downloaded to the ClaimCenter policy snapshot.
• Set this value to true if the policy adapter is not capable of returning a meaningful value for
Policy.TotalVehicles.
• Set this value to false otherwise.
Default: false
InputMaskPlaceholderCharacter
The character to use as a placeholder in masked input fields.
Default: . (period)
ListViewPageSizeDefault
The default number of entries that ClaimCenter 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.
MaxChooseByCoverageMenuItems
Maximum number of vehicles or properties that ClaimCenter displays in the New Exposure→Choose by Coverage
menu. If the number to return exceeds this limit, ClaimCenter prompts the user to use the Coverage Type menu
instead. This integer value must be 1 or greater.
Default: 15
MaxChooseByCoverageTypeMenuItems
Maximum number of coverage types that ClaimCenter displays in the New Exposure→Choose by Coverage Type menu.
If the number to return exceeds this limit, ClaimCenter splits the coverage types into alphabetic submenus. This
integer value must be 1 or greater.
Default: 15
MaxClaimantsInClaimListViews
Maximum number of claimants to list for each claim in a list view. This integer value must be 0 or greater. If set to
0, ClaimCenter does not impose a limit.
Default: 0
MaxTeamSummaryChartUserBars
Maximum number of users to show in the chart on the Team Summary page. Set this parameter to 0 to remove the
chart entirely. Otherwise, the chart displays statistics for the top N users, and groups the others into a bar labeled All
Other Users. This integer value must be 0 or greater.
Default: 10
QuickJumpShortcut
The keyboard shortcut to use to activate the QuickJump box.
Default: / (forward slash)
RequestReopenExplanationForTypes
The set of re-openable entities for which, if reopened, ClaimCenter displays a screen for the user to enter a reason
and note. Enter as a comma-separated list.
Default: Claim,Exposure,Matter
ShowCurrentPolicyNumberInSelectPolicyDialog
Whether to populate the select policy dialog with the policy number for the current policy for a claim.
Default: false
ShowFixedExposuresInLossDetails
Works with ShowNewExposureMenuForLossTypes.
• If true, claims that do not have the New Exposure menu have a fixed list of exposures that can be shown through
tabs on the Claim Loss page.
• If false, claims that do not have the New Exposure menu have a fixed list of exposures that can be shown through
separate top-level page links in the claim file.
Default: false
ShowNewExposureChooseByCoverageMenuForLossTypes
In the base application configuration, the ClaimCenter Actions→New Exposure menu contains two submenus, one of
which is the Choose By Coverage submenu. Use this parameter to specify for which loss types you can access the
Choose By Coverage submenu. Guidewire recommends that omit WC from the list of loss types.
Important
If you add a new value to the list of loss types in this configuration parameter, then you must also add that value to
configuration parameter ShowNewExposureMenuForLossTypes.
This caveat applies also if you modify one of the typefilters on the LossType typelist.
Default: AUTO,PR,GL,TRAV
ShowNewExposureChooseByCoverageTypeMenuForLossTypes
In the base application configuration, the ClaimCenter Actions→New Exposure menu contains two submenus, one of
which is the Choose By Coverage Type submenu. Use this parameter to specify for which loss types you can access the
Choose By Coverage submenu.
In modifying this parameter:
• Deleting one of the default parameter values removes the Choose by Coverage Type submenu for that loss type.
• Adding a value to the default parameter values list adds a Choose by Coverage Type submenu for that loss type. Add
your new loss type typecode to the existing comma-separated list of values.
It is also possible to create this same application behavior by adding a typekey to a typefilter of the same name as
this configuration parameter on the LossType typelist. If you added to the typefilter to modify the behavior of the
New Exposure menu, you can implement this change during a rolling upgrade of the ClaimCenter cluster application
servers. Conversely, if you implement this behavior by modifying file config.xml, then you need to perform a full
database upgrade to implement your changes.
Important
If you add a new value to the list of loss types in this configuration parameter, then you must also add that value to
configuration parameter ShowNewExposureMenuForLossTypes.
This caveat applies also if you modify one of the typefilters on the LossType typelist.
Default: AUTO,PR,GL,TRAV
ShowNewExposureMenuForLossTypes
Use to specify the ClaimCenter Actions→New Exposure menu for a specific loss type. Essentially, this parameter
determines for which loss types it is possible to create a new exposure.
In modifying this parameter:
• Deleting one of the default parameter values removes the New Exposure menu for that loss type. Removing the New
Exposure menu for a loss type also hides the Exposures step in the New Claim wizard for that loss type.
• Adding a value to the default parameter values list adds a Choose by Coverage Type submenu for that loss type. Add
your new loss type typecode to the existing comma-separated list of values.
It is also possible to create this same application behavior by adding a typekey to a typefilter of the same name as
this configuration parameter on the LossType typelist. If you added to the typefilter to modify the behavior of the
New Exposure menu, you can implement this change during a rolling upgrade of the ClaimCenter cluster application
servers. Conversely, if you implement this behavior by modifying file config.xml, then you need to perform a full
database upgrade to implement your changes.
Important
If you add a new value to the list of loss types in ShowNewExposureMenuForLossTypes, you must also add that
value to one, or both, of the following configuration parameters:
• ShowNewExposureChooseByCoverageMenuForLossTypes
• ShowNewExposureChooseByCoverageTypeMenuForLossTypes
This requirement also applies if you modify one of the typefilters on the LossType typelist.
Default: AUTO,PR,GL,TRAV
UISkin
Name of the ClaimCenter interface skin to use.
Default: theme-9
WebUIAJAXTimeout
Number of seconds that the ClaimCenter web client waits after issuing a call to the ClaimCenter server. If the server
does not respond within this time, the web client assumes that the server is offline, terminates all connections, and
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 days to retain instrumentation information for a worker instance before ClaimCenter 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,
ClaimCenter sets AvailableSince to the current time. Later, ClaimCenter 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, ClaimCenter sets AvailableSince according to
the following formula:
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, ClaimCenter reverts the status of the work item from checkedout to
available. At the same time, ClaimCenter resets AvailableSince according to the following formula:
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 ClaimCenter 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, ClaimCenter logs the error only if
the number of attempts exceeds the configured value of the WorkItemRetryLimit. Otherwise, ClaimCenter logs the
debug message instead.
The value for WorkItemRetryLimit applies to all work queues unless overridden in work-queue.xmlby
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 93. All threads that are not core threads are additional on-demand
threads. ClaimCenter 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 ClaimCenter administration tool for creating and managing
ClaimCenter resources. (Studio resources include Gosu rules, classes, enhancements, script parameters, and the
ClaimCenter 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 (Software Configuration Management)
system
Getting started 97
Configuration Guide 9.0.5
IMPORTANT Do not create installation directories that have spaces in the name. This can prevent Guidewire
Studio from functioning properly.
Guidewire
Studio
Debug
Development Debug
QuickStart
Server
Test
Server
ClaimCenter
QuickStart Database Application
and
Check Out/Submit
Configuration
Files
Database
Local
Configuration WAR / EAR
Files
SCM
System
ClaimCenter Database
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 mode The database does not persist data to the hard drive and it effectively drops the database each time you
restart the server. Guidewire does not recommend this configuration.
You set configuration parameters for the QuickStart database associated with the development server in database-
config.xml. For example:
jdbc-url="jdbc:h2:file:/tmp/guidewire/cc"
Procedure
1. Navigate to the ClaimCenter 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 gwcc 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 releases. For the
updated commands, see the Installation Guide.
build The output of build commands such as exploded .war and .ear files and the data and security dictionaries. This
directory is not present when you first install ClaimCenter. The directory is created when you run one of the
build commands.
dist Guidewire application .ear, .war, and .jar files are built in this directory. The directory is created when you run
one of the build commands to generate .war or .ear files.
doc HTML and PDFs of ClaimCenter 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 ClaimCenter.
logs Application log files.
modules Subdirectories including configuration resources for each application component.
repository Necessary ClaimCenter files.
solr Installation and support files for the Solr free text search platform. See “Free-text search configuration” on page
411.
studio Application files for Guidewire Studio.
ThemeApp Files defining the user interface styling for ClaimCenter.
webapps Necessary files for use by the application server.
Guidewire recommends that you use Studio to edit configuration files to minimize the risk of accidentally editing a
file outside the configuration module.
Key directories
The installation process creates a configuration environment for ClaimCenter. In this environment, you can find all
of the files needed to configure ClaimCenter in two directories:
• The main directory of the configuration environment. In the default ClaimCenter installation, the location of this
directory is ClaimCenter/modules/configuration.
• ClaimCenter/modules/configuration/config contains the application server configuration files.
The installation process also installs a set of system administration tools in ClaimCenter/admin/bin.
ClaimCenter runs within a J2EE server container. To deploy ClaimCenter, 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 ClaimCenter (deployed as the cc.war
application) running on a Tomcat J2EE server on Windows, the deployment directory might be C:\Tomcat\webapps
\cc.
Procedure
1. In your ClaimCenter installation directory, create a text file named studio.ultimate 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 ClaimCenter/modules/script/gw-build.gradle.
studio {
...
}
3. Within this section, set any properties that are valid in the idea.properties 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["idea.cycle.buffer.size"] = "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:
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:
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
Note: Adding an instance variable rather than a static variable with an initializer also results in null values on
existing instances of the object. However, any newly-constructed instances of the object will have the field
initialized.
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.
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:
https://studio-release.guidewire.com/releases/
Procedure
1. Download the Studio update files. See “Download update files from the Guidewire Community” on page 106.
2. Place the Studio update files in the shared location in your update site. You must include both the latest
studio-*.zip file, and also the metadata.txt file
3. In Studio, click File→Settings.
4. In the Settings dialog, in the navigation list, click Guidewire Studio.
5. In the Update section, set the Update Site URL text box to the URL of your update site.
6. Repeat from step 3 for each instance of Studio that updates from your update site.
Procedure
1. In the updated Studio installation, go to the directory ClaimCenter/studio.
2. Copy the studio-*.zip file with the highest release number.
Next steps
See also
• “Manually install the Studio update files” on page 106.
Procedure
1. In the Studio installation to update, go to the directory ClaimCenter/studio/plugins.
Next steps
See also
• “Updating Studio manually” on page 106.
This topic discusses a number of common tasks related to working in Guidewire Studio.
Dot completion Opens a context-sensitive pop-up window that contains all the subobjects and methods that are valid for this
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 110 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.
https://www.jetbrains.com/idea/help/keyboard-shortcuts-by-category.html
Alt+Enter Intention actions Offers suggestions to correct the error nearest the caret.
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 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.
gwb verifyResources
provides do not use these options. For example, if you make changes to your Gosu code that might cause many
compilation errors or warnings, you can set options to terminate the compilation after reaching a threshold.
To set Gosu command-prompt compilation options, you edit the build.gradle file in the ClaimCenter
configuration folder. You add the configuration options and values at the top of the file, similar to the following
lines:
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 build.gradle file.
tasks.compileGosu.gosuOptions.checkedArithmetic = 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 build.gradle file.
tasks.compileGosu.gosuOptions.failOnError = 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.
tasks.compileGosu.gosuOptions.failOnError = true
tasks.compileGosu.gosuOptions.maxErrs = 10
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.
:modules:configuration:compileGosu FAILED
tasks.compileGosu.options.warnings = true
tasks.compileGosu.gosuOptions.maxWarns = 100
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.
:modules:configuration:compileGosu FAILED
tasks.compileGosu.gosuOptions.verbose = true
At the command prompt run the gwb compile command. Output similar to the following lines appears.
See also
• Gosu Reference Guide
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 ClaimCenter/modules/script/gw-build.gradle.
2. Locate the studio section:
studio {
...
}
ideaProperties["tasks.studio.maxHeapSize"] = "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
tasks.pluginStudio.maxHeapSize.
4. Restart Studio.
Next steps
See also
• “Setting IntelliJ IDEA properties in Studio” on page 102
•
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.
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 ClaimCenter Studio.
Gosu packages
Guidewire ClaimCenter 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 ClaimCenter to add properties and methods, and you can write your own Gosu
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.
Studio stores enhancement files in the gsrc folder in the resources tree. Gosu class files end in .gs.
See also
• “ClaimCenter base configuration classes” on page 123
• “Class visibility in Studio” on page 125
• “Preloading Gosu classes” on page 126
• Gosu Reference Guide
com.guidewire.pl.quickjump.BaseCommand
For a discussion of the QuickJump functionality, see “Implementing QuickJump commands” on page 143.
Gosu classes 123
Configuration Guide 9.0.5
The gw package
In the base ClaimCenter 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:
• gw.api.*
• gw.plugin
gw.api.*
There are actually two gw.api 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 can not only
access these classes but also modify them to suit your business needs.
You access both the same way, by entering gw.api 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 gw.api. 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.
gw.plugin
If you create a new Gosu plugin, place your plugin class in the gw.plugin package.
See also
• For information on how to use Studio to work with plugins, see “Using the plugins registry editor” on page 135.
• For information on various types of plugins and how to implement plugins, see the Integration Guide.
libraries.Activityassignment.getUserRoleGroupTypeBasedonActivityPattern( activitypattern )
Or, place a uses statement at the top of your Gosu file, which allows you to enter the library name only (for
example):
uses libraries.Activityassignment
...
Activityassignment.getUserRoleGroupTypeBasedonActivityPattern( activitypattern )
See also
• “ClaimCenter financial calculations” on page 743
• “Configuring ClaimCenter financials” on page 735
• “Configuring ClaimCenter financial screens” on page 767
PolicyCenter/modules/configuration/gsrc/gw/webservice/pc/pc700/ccintegration/ccentitie
To access the class functionality, first create a new class in the following Studio Classes package:
gw.webservice.pc.ccintegration.v2.ccentities
package gw.webservice.pc.ccintegration.v2.ccentities
uses java.util.Date
uses gw.api.web.product.ProducerCodePickerUtil
uses gw.api.web.producer.ProducerUtil
construct() { }
Static method invocations Static method invocations dictate some kind of action and have the following syntax:
type#method
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 gw.api.startup.PreloadActi
ons class. For example, to cause all Gosu types to be loaded from disk, use the following:
gw.api.startup.PreloadActions#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 – ClaimCenter loads the associated Java class file.
• Gosu – ClaimCenter 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 Server.Preload, 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 preload.txt file.
Result
The next time that you start the application server, ClaimCenter compiles those types on startup.
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.
Next steps
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.
See also
• Gosu Reference Guide
Script parameters
Script parameters are Studio-defined resources 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, ClaimCenter 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 ClaimCenter user interface.
Note: Script parameters are read-only within Gosu. You cannot set the value of a script parameter in a Gosu
statement or expression.
<script-parameters>
<ScriptParameterPack ParamName="ParameterName" ParamType="datatype">
<ParamValue>value</ParamValue>
</ScriptParameterPack>
</script-parameters>
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, ClaimCenter 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 ClaimCenter user interface.
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→resources, and then open the
file ScriptParameters.xml.
2. Edit the XML and define your new parameter using the existing format as a guide.
3. Navigate to configuration→gsrc→gw→scriptparameter, and then double-click ScriptParametersEnhancement.
4. Add a static property getter method that returns a value of the correct data type for the new parameter.
For example, for a script parameter of type varchar, use code similar to the following:
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→resources, and then open the
file ScriptParameters.xml.
2. Edit the XML and remove the element defining the parameter to delete.
You can, instead, create a script parameter named maxDate and rewrite the line as follows:
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 ClaimCenter
interface.
This topic discusses the various editors available to you in Guidewire Studio.
A ClaimCenter plugin is a mini-program that you can invoke to perform some task or calculate a result.
Each Plugins Registry item (each.gwp file) includes fields for the following information:
• Plugin name – A unique name for this plugin implementation. Plugin names can include alphanumeric
characters only. Space or blank characters are not allowed. If the plugin interface supports only a single
implementation, make this the name of the interface without the package.
• Implementation class – The plugin implementation class as a fully-qualified class name.
• Plugin interface – The interface that the class implements. If the plugin interface field is left blank, ClaimCenter
uses the plugin name as the interface name.
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 ClaimCenter multi-threaded inbound integration APIs, which use
startable plugins.
See also
• Integration Guide
4. In the Interface box, type the name of the plugin interface, or click Browse to search for valid interfaces.
For all startable plugins, enter IStartablePlugin.
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:
gw.plugin.package.impl
You must enter the fully-qualified path to the Gosu implementation class. For example, use gw.plugin.email.i
mpl.EmailMessageTransportPlugin for the Gosu EmailMessageTransport plugin.
See the Integration Guide for more information.
Java Implementations
If you select Add Java Plugin, you see the following:
Java Class Type the fully qualified path to the Java class that implements this plugin. This is the dot separated package
path to the class. Place all custom (non-Guidewire) Java plugin classes in the following directory:
ClaimCenter/modules/configuration/plugins/
Plugin (Optional) Type the name of the base plugin directory for the Java class. This is a folder (directory) in the mod
Directory ules/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.
3. After creating the plugin, you can add parameters to it. To do so, click Add Parameter , and then enter the
parameter name and value.
If you have already set the environment or server property at the global level, then those values override any
that you set in this location. For any property that you set in this location to have an effect, that property must
be set to the Default (null) at the global level for this plugin. For more information on setting environment
or server properties, see “Set environment and server context for plugin implementations” on page 138.
gw.plugin.billing.bc800.BCBillingSystemPlugin
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:
Application Abbreviation
ClaimCenter cc
PolicyCenter pc
ContactManager ab
BillingCenter bc
ClaimCenter 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.
See also
• Integration Guide
Procedure
1. In Studio, navigate in the configuration→gsrc→wsi hierarchy to a package in which to store the collection file.
2. Right-click and choose New→Webservice Collection. Studio prompts for a name for the web service collection.
Enter a name for the web service collection and click OK to show the Web Service editor.
3. On the editor toolbar, click the Add New Resource icon.
4. In the Add Resource window, enter the URL of the WSDL for the external web service. This is also called the
web service endpoint URL. After a valid URL is entered, click OK.
5. Studio recognizes that the list of resource URLs has been modified and offers to fetch updated resources.
Click Yes. Studio retrieves the WSDL and XSD files for the web service. The file contents can be viewed in
the Fetched Resources tab. Updated resources can be fetched at any time by clicking the toolbar's Fetch icon.
6. The created collection URL is shown in the editor’s Resources pane.
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 ClaimCenter 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 ClaimCenter. (Therefore, to remove the QuickJump box from the ClaimCenter interface, remove all commands
from the QuickJump configuration editor.)
You set the keyboard shortcut that activates the QuickJump box in config.xml. 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 144
ParameterizedNavigationCommand “Implementing QuickJumpCommandRef commands” on page 144
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 146
for details.
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 ClaimCenter would have checked the
Note.create 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, ClaimCenter 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, ClaimCenter cannot determine automatically whether to display the
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 Studio Entity
Names editor.
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 Person.LastName and Name as Company.Name, 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:
an Entity Path of Exposure.ClaimantDenorm. Suppose also that you set the value of Use Entity Name to true. In this
case, the entity name for the Claimant, as defined by the Contact entity name definition, would be included in a
String variable called claimant. ClaimCenter 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 ClaimCenter 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 ClaimCenter 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.
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, ClaimCenter 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 ClaimCenter 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 Claim.InsuredDenorm.)
• 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.
entity.DisplayName
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. ClaimCenter 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 ClaimCenter 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. Next to the Messaging Config drop-down list, click Add Messaging .
2. In the New Messaging dialog box, type the name for the new message configuration.
3. Add message destinations as required.
Procedure
1. In the Messaging Config drop-down list, click the messaging configuration to remove.
2. Click Remove Messaging .
ClaimCenter 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 135. 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.
Next steps
If the Disabled checkbox 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 properties
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 Navigate to the display key that you want to modify, and then modify the string in the editor as
existing display key 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 Highlight the display key that you want to delete, and then press Delete.
key
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.
For example, suppose that you enter the following in the Rules editor:
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:
Thus, at run time, ClaimCenter 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:
Java.Admin.User.InvalidGroupAdd = The group {0} cannot be added for the user {1}
as they do not belong to the same organization.
Method DisplayKey.get
Use the DisplayKey.get method to return the value of the display key. Use the following syntax:
DisplayKey.get(display_key_name)
For example:
DisplayKey.get("Java.Admin.User.DuplicateRoleError")
returns:
This also works with display keys that require a parameter or parameters. To retrieve the parameter value, use the
following syntax.
DisplayKey.get(display_key_name, arg1)
For example, the display key properties file defines the following display key with placeholder {0}:
Suppose that you have the following display key Gosu code:
DisplayKey.get("Java.UserDetail.Delete.IsSupervisorError", 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 DisplayKey.get method:
uses gw.api.locale.DisplayKey
Guidewire provides the Data Dictionary to help you understand the ClaimCenter 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
“What is the Data Dictionary?” on page 165
“What can you view in the Data Dictionary?” on page 166
“Using the Data Dictionary” on page 167
gwb genDataDictionary
ClaimCenter stores the current version of the Data Dictionary in the following directory:
ClaimCenter/build/dictionary/data/
ClaimCenter/build/dictionary/data/index.html
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.
See also
• “Regenerating the data and security dictionaries” on page 37
Related concepts
“Regenerating the data and security dictionaries” on page 37
• The migration view omits entities that are persistent but non-loadable. For example, Group is not loadable.
Therefore, the migration view does not display it.
Related concepts
“Using the Data Dictionary” on page 167
Related concepts
“Property colors” on page 167
“Object attributes” on page 168
“Entity subtypes” on page 169
“Data field types” on page 169
“Virtual properties on data entities” on page 170
“What is a typelist?” on page 304
“What can you view in the Data Dictionary?” on page 166
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
following 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
definition 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
extension entity in the extensions folder.
Color Meaning
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 ClaimCenter 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 data objects” on page 185.
Object attributes
An object in the ClaimCenter 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
Transaction entity has the attributes Abstract, Editable, Extendable, Keyed, Loadable, Sourceable, Supertype, 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, but does not make sense 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, it tracks who created it and the time, and who
last edited it and the time.
Extendable It is possible to extend the entity with additional custom fields added to it.
Final It is not possible to subtype this entity. You can, however, extend it 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. ClaimCenter 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 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
application 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. ClaimCenter deletes the
entity after the operation is complete.
Versionable The entity has a version number that increases every time the entity changes. The ClaimCenter 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 ClaimCenter 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 Transaction
entity has a property named Claim. The attributes of this property are export as id, exportable, loadable, 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 Obsolete. The property is available to the SOAP APIs.
export as id Obsolete. The property causes the system to create an appropriate identifier for the referenced
entity. For example, the exported identifier will be ClaimIdentifier if the property points to the
claim table.
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 .
non-null The property cannot contain null values.
overwritten on load The property contains an overwrittenInStagingTable attribute with a value of true.
ClaimCenter 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 180 and 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, ClaimCenter
initiates validation on the property. See “<array>” on page 200, “<foreignkey>” on page 211,
and “<onetoone>” on page 216 for more information about the effects of the triggersValidat
ion 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.
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 ClaimCenter 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.
ClaimCenter 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.
ClaimCenter also looks at the subtype as it decides which fields to show in the ClaimCenter 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, contact to addresses. There is no actual column in the
database table that maps to the array. ClaimCenter stores this information 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.
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 Indicates a derived property. ClaimCenter does not store virtual properties in the ClaimCenter physical
property database.
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.
The in ClaimCenter data model comprises the persistent data objects, called entities, that ClaimCenter manages in
the application database.
Related concepts
“What is the data model?” on page 171
“Overview of data entities” on page 173
“Base ClaimCenter data objects” on page 181
Related references
“Data object subelements” on page 199
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 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 ClaimCenter 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.
WARNING Do not attempt to modify any files other than those in the ClaimCenter/modules/configuration
directory. Any attempt to modify files outside of this directory can prevent the ClaimCenter application from
starting.
claim.LossDate
However, suppose that you want to reference a field on an entity that relates to the claim, such as the policy
expiration date. You must first describe the path from the claim to the policy, then describe the path from the policy
to the expiration date of the policy:
claim.Policy.ExpirationDate
Related concepts
“The ClaimCenter archive domain graph” on page 325
WARNING Do not modify any of the base data entity definition files (those in the ClaimCenter/modules/
configuration/config/metadata directory) by editing them directly. You can view these files in read-only
mode in Studio in the configuration →config→Metadata folder.
To better understand the syntax of entity metadata, it is sometimes helpful to look at the ClaimCenter data model
and its metadata definition files. ClaimCenter 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.
The type of a metadata definition file determines what you can store and whether you can modify its contents.
configuration→config→Metadata→Typelist No
.tix configuration→config→Metadata→Typelist No
.ttx configuration→config→Extensions→Typelist Yes
At runtime, ClaimCenter merges the .eti and .eix versions of the Address definition file to create a complete
Address entity type.
definitions in the Extensions folder to them. This lets you create an entity extension that overrides any Guidewire
entity extensions.
To extend the ClaimCenter 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 In a production environment, Guidewire 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 extensions.properties file in a development environment is optional.
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.
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 datamodel.xsd. You can invalidate your ClaimCenter installation and
prevent it from starting thereafter.
<?xml version="1.0"?>
<entity xmlns="http://guidewire.com/datamodel"
desc="An activity is a instance of work assigned to a user and belonging to a claim."
entity="Activity"
exportable="true"
extendable="true"
platform="true"
table="activity"
type="retireable">
...
</entity>
At application server start up, ClaimCenter loads the XML definitions of the data entities into the application
database.
<entity xmlns="http://guidewire.com/datamodel"
entity="Activity"
...
type="retireable">
...
</entity>
Notice that for the base configuration Activty object, ClaimCenter sets the type attribute to retireable. The type
attribute that determines how ClaimCenter manages the data entity in the ClaimCenter database. For example:
• If a data entity has a type value of versionable, ClaimCenter 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, ClaimCenter stores instances of the entity in the database
forever. However, you can retire, or hide, specific instances so that ClaimCenter does not display them in the
interface.
IMPORTANT For each data entity in the ClaimCenter data model and for each entity type that you declare,
ClaimCenter 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.
cc_ Entity table – one for each entity in the base configuration
ccx_ 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 “Non-persistent entity data objects” on page 191 for more information.
Besides entity tables, ClaimCenter 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 server.running.tests 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, ClaimCenter drops the database, recreates it, and then creates the shadow tables. ClaimCenter
creates shadow tables only in an empty database.
Staging tables
ClaimCenter 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:
• ClaimCenter replaces foreign keys by PublicID objects of type String.
• ClaimCenter 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 use this
command.
IMPORTANT Some data types, for example, Entity, contain an overwrittenInStagingTable attribute. If this
attribute is set to true, then do not attempt to populate the associated staging table yourself because the loader
import process overwrites this table.
In the application database, you can you identify a staging table by the following prefix ccst_.
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 ClaimCenter defaults to a scriptability of all.
IMPORTANT There are subtle differences in how ClaimCenter treats entities and fields marked as doesNotExist
and hidden. However, these differences relate to internal ClaimCenter 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.
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 data objects” on page 182
Related references
“Entity data objects” on page 185
“Extension data objects” on page 190
“Non-persistent entity data objects” on page 191
“Subtype data objects” on page 193
“View entity data objects” on page 195
“View entity extension data objects” on page 198
<implementsEntity name="SomeDelegate"/>
For example, in the base configuration, the Group entity implements the Validatable delegate by using the
following:
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 213
• “Creating a new delegate object” on page 243.
• 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.
Also, it is not possible to explicitly implement the EventAware delegate. ClaimCenter 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.
Attributes of <delegate>
The <delegate> element contains the following attributes.
Subelements of <delegate>
The <delegate> element contains the following subelements.
<delegate
hierarchy with a number of different subtypes that each have their own columns. Using a delegate avoids this single-
table inheritance while preserving the ability to define the fields and behavior common to all the subtypes in one
place.
Guidewire recommends that you consider carefully before making a decision on how to model your entity hierarchy.
Attributes of <entity>
The <entity> element contains the following attributes.
cacheable Internal. If set to false, then Guidewire prohibits entities of this type and all its true
subtypes from existing in the global cache.
consistentChildren Internal. If set to true, then ClaimCenter generates a consistency check and a loader false
validation that tries to ensure that links between child entities of this entity are
consistent. Guidewire enforces the constraint only while loading data from staging
tables. You can detect violations of the constraint on data committed to entity
tables after the fact by running a consistency check.
IMPORTANT Guidewire does not enforce consistentChildren constraints at
bundle commit.
desc A description of the purpose and use of the entity. None
displayName Optional. Creates a more human-readable form of the entity name. You can access None
this name using the following:
entity.DisplayName
final If true, you cannot subtype the entity. If false, you can define subtypes using this true
entity as the supertype.
IMPORTANT If you define this incorrectly, ClaimCenter generates an error message
upon resource verification and the application server refuses to start. ClaimCenter
generates this verification error:
• If you attempt to subtype an entity that is marked as final that exists in the met
adata folder in Studio.
• If you attempt to subtype an entity that is marked as final that exists in the ext
ensions folder in Studio.
ignoreForEvents The ignoreForEvents attribute indicates whether other entities pass over the false
instant entity when determining the origin of an event. If the value of ignoreForEve
nts is true, ClaimCenter ignores the entity in this context.
If the <events> element is not present in an entity, that entity does not generate
events. Moreover, that entity does not generate events when you create, modify, or
delete it. Thus, it makes no sense for ClaimCenter to examine either that entity or
entities that reference it when the product searches for the source of an event.
Nonetheless, even if an entity generates no events, whenever you modify it,
ClaimCenter still examines that entity and all entity instances that reference it. The
scope of this examination encompasses the non-event-generating entity as well as
arrays, foreign keys, and edge foreign keys that reference it. If ClaimCenter finds an
entity instance that both generates events and references the modified, non-event-
generating entity, the product generates a Changed event for that entity instance.
This examination and event generation process results in unnecessary and long
chain queries.
Guidewire offers two solutions to the resultant performance challenge. You can
avoid the examination and event generation altogether if you set the ignoreForEve
nts attribute to true on the non-event-generating entity. In this case, ClaimCenter
ignores the non-event-generating entity as well as references to it when an event
occurs.
As an alternative, you can avoid the examination and event generation in some
cases while allowing the process in others. To effect this selective avoidance, set the
ignoreForEvents attribute to true not on the non-event-generating entity. Rather,
set it to true only on event-generating entity instances both that reference the
entity and that you want ClaimCenter to ignore. Such referencing entity instances
might be arrays, foreign keys, or edge foreign keys.
In this case, when you modify the non-event-generating entity, ClaimCenter does
not ignore the entity altogether. When you modify the entity, event-generating
entity instances that reference the entity and on which the ignoreForEvents
attribute is false still generate events. Instead, ClaimCenter ignores only the
referencing entity instance on which you set the ignoreForEvents attribute to tr
ue.
loadable If true, you can load the entity through staging tables. true
lockable Internal. If set to true, ClaimCenter adds a lock column (lockingcolumn) to the false
table for this entity. ClaimCenter uses this to acquire an update lock on a row. The
most common use is on objects in which it is important to implement safe ordering
of messages. In that case, the entity that imposes the safe ordering needs to be
lockable.
IMPORTANT Guidewire strongly recommends that you do not use this locking
mechanism.
overwrittenInStagingTable Internal. If true and the entity is loadable, the loader process auto-populates the false
staging table during import.
IMPORTANT If set to true, do not attempt to populate the table yourself, because
the loader import process overwrites this table.
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 -1
entities 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 None
import as administrative data and then never touch again.
You can add a read-only entity only to a bundle that has the allowReadOnlyBeanCha
nges() 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 administrative 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 180. None
subpackage Subpackage to which the class corresponding to this entity belongs. None
table Required. The name of the database table in which ClaimCenter stores the data for None
this entity. ClaimCenter automatically prefixes table names with cc_ for base
entities and ccx_ for extension entities.
Guidewire recommends the following table naming conventions:
• 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 ClaimCenter automatically prefixes extension table names with ccx_, 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 maximum allowable length of
the table name:
• loadable="true" — maximum of 25 characters
• loadable="false" — maximum of 26 characters
IMPORTANT Do not modify internal entity attributes. This instruction applies even in the case of custom entities.
Subelements of <entity>
The <entity> element contains the following subelements.
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 216.
remove-index See “<remove-index>” on page 218.
IMPORTANT Do not modify internal entity subelements even in the case of custom entities.
columnName Name to use for the database column corresponding to this property. If you do not None
specify a value, then ClaimCenter uses the name value instead.
The columnName attribute must be no more than 30 characters in length. It allows only
unaccented Roman letters, numbers, and the underscore character. The first character of
the columnName attribute must be a letter. Although the underscore character is
allowable here, Guidewire discourages its use.
deprecated If true, then ClaimCenter marks the item as deprecated in the Data Dictionary and places false
a Deprecated annotation on it in the Guidewire Studio API Reference.
If you deprecate an item, use the description to explain why.
For more information, see “Data object subelements” on page 199.
desc Description of the intended purpose of this column. None
name Required. Name of the column on the table and the field on the entity. The name value None
maps to the accessor and mutator methods of a field on the entity, not the actual private
member field. For example, name maps to setName and getName, not the private _name
member field.
Column names must contain letters only. A column name cannot contain an underscore.
sourceColumn Required. Name of the column on the source entity, whose value this column copies. The None
sourceColumn must not name a localized column.
sourceForeignKey Required. Name of a foreign key field on this entity, which refers to the source entity for None
this search denormalization column. The sourceForeignKey must not be importable
against existing objects.
sourceSubtype Optional name of the particular subtype on which the source column is defined. If not None
specified, then ClaimCenter assumes that the source column to exist on the entity
referred to by the source object. However, you must specify this value if the sourceColum
n 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. ClaimCenter 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.
Attributes of <extension>
The <extension> element contains the following attributes.
Subelements of <extension>
The <extension> element contains the following subelements.
Attributes of <nonPersistentEntity>
The <nonPersistentEntity> element contains the following attributes.
abstract If true, you cannot an create instance of the entity type at runtime. Instead, you false
must declare a subtype entity with abstract=false, which you can instantiate. Any
of the generated code is abstract.
desc A description of the purpose and use of the entity. None
displayName Optional. Creates a more human-readable form of the entity name. You can access None
this name using the following:
entity.DisplayName
If you do not specify a value for the DisplayName attribute, then the entity.Displ
ayName method returns the value of the entity attribute, instead. If you subtype an
entity that has a specified display name, then the entity.DisplayName method
returns the name of the subtype key.
entity Required. The name of the entity. You use this name to access the entity in data None
views, rules, and other areas within ClaimCenter.
exportable Unused.
extendable If true, it is possible to extend this entity. true
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 -1
entities 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 ClaimCenter automatically creates a typelist to None
keep track of the subtypes of that entity. That typelist has an associated database
table. If you do not specify a value for this attribute, then ClaimCenter uses the
name of the entity as the table name for the subtype typelist.
However, ClaimCenter places a restriction of 25 characters on the length of the
database 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.
Attributes of <subtype>
The <subtype> element contains the following attributes:
Subelements of <subtype>
The <subtype> element contains the following subelements.
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 216.
searchColumn See “Entity data objects” on page 185
searchTypekey Defines a search denormalization typekey in the database. The denormalization copies the
value 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 219.
validatetypekeyinset Internal.
validatetypekeynotinset Internal.
<?xml version="1.0"?>
<subtype xmlns="http://guidewire.com/datamodel" desc="Professional inspector" displayName="Inspector"
entity="InspectorExt"
supertype="Person">
<column name="InspectorLicenseExt" type="varchar" desc="Inspector's business license number">
<columnParam name="size" value="30"/>
</column>
</subtype>
Notice that while InspectorExt is subtype of Person, Person, itself, is a subtype of Contact. ClaimCenter
automatically adds the new InspectorExt type to the Contact typelist. This is true, even though ClaimCenter
marks the Contact typelist as final.
To see this change:
• In the ClaimCenter Data Dictionary, you must restart the application server.
• In the Contact typelist in Studio, you must restart Studio.
See also
• “Defining a subtype” on page 248
For example, from the ActivityView, you can specify a column with a Claim.ClaimNumber value. The Activity
entity is the primary entity of the ActivityView. The Activity entity has a corresponding view entity called
ActivityView.
Unlike a standard entity, a view entity does not have an underlying database table. ClaimCenter does not persist
view entities to the database. Instead of storing data, a view entity restricts the amount of data that a database query
returns. A view entity does not represent or create a materialized view, which is a database table that caches the
results of a database query.
Queries against a view entity type are actually run against the normal entity table in the database, as specified by the
primaryEntity attribute of the view entity definition. The query against a view entity automatically adds any joins
necessary to retrieve view entity columns if they include a bean path. However, access to view entity columns is not
possible when constructing the query.
A view entity improves the performance of ClaimCenter on frequently used pages that list entities. Like other
entities, you can subtype a view entity.
For example, the My Activities page uses a view entity, the ActivityDesktopView, which is a subtype of the
ActivityView.
Because ClaimCenter can export view entity types, it generates SOAP interfaces for them.
Note: If you create or extend a view entity that references a column that is of type="currencyamount", then you
must handle the view entity extension in a particular manner. See “Extending an existing view entity with a
currency column” on page 252 for details.
Guidewire defines this object in the data model metadata files as the <viewEntity> XML root element.
Attributes of <viewEntity>
The <viewEntity> element contains the following attributes:
final If true, the entity definition is final and you cannot define any subtypes for it. If false, true
then you can define a subtype using this 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.
primaryEntity Required. The primary entity type for this viewEntity object. The primary entity must None
be keyable. See “Data entities and the application database” on page 177 for
information on keyable entities.
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:
The expression for this column can take multiple column values ${column_num} passed from the ClaimCenter
interface. For example, a valid expression is: ${1} - ${2} with ${1} the first column and ${2} 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, ClaimCenter applies an SQL group automatically.
Attributes of <viewEntityExtension>
The <viewEntityExtension> element contains the following attributes:
entityName Required. This value must match the file name of the viewEntityExtension None
that it extends.
ClaimCenter generates an error at resource verification if the value set that
you set for the entityName attribute for a viewEntityExtension does not
match the file name.
Subelements of <viewEntityExtension>
The <viewEntityExtension> element contains the following subelements:
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.
<array>
An array defines a set of additional entities of the same type to associate with the main entity. For example, a Claim
entity includes an array of Document entities.
Attributes of <array>
The <array> element contains the following attributes:
ignoreForEvents Determines whether ClaimCenter generates an event if a user modifies the <array> false
element in any way. Such modifications include adding an entity to, changing an entity in,
and removing an entity from the <array> element. If the ignoreForEvents attribute is set
to true, ClaimCenter will not generate an event.
For more information, see
ignoreForEvents
.
name Required. The name of the property corresponding to this array None
owner If true, then this entity owns the objects in the array. This has the following behavior: false
• 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 isFie
ldChanged returns false if a child element of the array has changed. In either case, isF
ieldChanged returns true if any child elements are added to or removed from the array,
regardless of the value of the owner attribute.
• If true, then if you delete the owning object, then ClaimCenter deletes (or retires) the
array items, as well. In this case, ClaimCenter deletes the array items notwithstanding a
value of false for the cascadeDelete attribute.
• If true, then if you update the contents of the array, then ClaimCenter 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 ca
scadeDelete and triggersValidation attributes.
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 ClaimCenter 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 ClaimCenter 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 ClaimCenter 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, ClaimCenter invokes the IPreUpdateHandler
plugin on the commit bundle instead. Then, ClaimCenter executes the logic defined in the plugin on the commit
bundle.
• If the parent entity has validation rules, but no preupdate rules, then ClaimCenter 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, ClaimCenter does nothing.
2. In the case of UseOldStylePreUpdate=false, ClaimCenter calls the IPreUpdateHandler plugin on the
commit bundle.
• In any case, any ClaimCenter processing of the commit bundle excludes the Closed and Reopened
validation rules.
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 239
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 column. None
This attribute is applicable only for integer columns, and only for implementations
where ClaimCenter 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 aut
oincrement column per table.
columnName Optional. If specified, ClaimCenter uses this value as the column name of the None
corresponding database column. If you do not specify a columnName value, then
ClaimCenter uses the value of the name attribute 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 underscore character. The first
character of the columnName attribute must be a letter. Although the underscore
character is allowable here, Guidewire discourages its use.
IMPORTANT All column names on a table must be unique within that table.
Otherwise, Studio displays an error if you verify the resource and the application
server fails to start.
createhistogram Whether to create a histogram on the column during an update to the database false
statistics.
Note: It is possible to override this attribute on an existing column in an extension (
*.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 previously 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_to
ols command.
See also
• “Working with attribute and element overrides” on page 239
• System Administration Guide
default Default value given to the field during new entity creation. None
deprecated If true, then ClaimCenter marks the item as deprecated in the Data Dictionary and false
places a Deprecated annotation on it in the Guidewire Studio API Reference.
If you deprecate an item, use the description to explain why.
For more information, see “Data object subelements” on page 199.
desc A description of the purpose and use of the field. None
exportable Unused.
getterScriptability See “Data objects and scriptability” on page 180 for information. all
ignoreforevents If you change (or add, or remove) an entity X that does not generate events, then false
ClaimCenter searches for all event-generating entity instances that specify X. If
ClaimCenter finds any of these event-generating entity instances, it generates Chan
ged events for those entity instances.
To determine what entities reference a non-event-generating entity, ClaimCenter
examines the foreign keys and arrays that point to the entity. However, if you set i
gnoreForEvents to true on an entity that references the non-event-generating
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 152
• Globalization Guide
type Required. Data type of the column, or field. In the base configuration, Guidewire None
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.
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 mediumtext.dti. 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 Account.eti in PolicyCenter, illustrates how to use this subelement to define certain
column parameters.
<?xml version="1.0"?>
<entity xmlns="http://guidewire.com/datamodel"
desc="An account is ..."
entity="Account"
...
table="account"
type="retireable">
<column> 205
Configuration Guide 9.0.5
...
<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.
currencyProperty Name of a property on the owning entity that returns the currency for this column.
encryption Whether ClaimCenter 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 ClaimCenter 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
currency amount column.
size Integer size value for columns of type TEXT and VARCHAR. This parameter specifies the
maximum number of characters, not bytes, that the column can hold.
WARNING The database upgrade utility automatically detects definitions that lengthen or
shorten a column. For shortened columns, the utility assumes that you wrote a version check or
otherwise 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 ClaimCenter automatically removes leading and
trailing white space from the data value.
validator The name of a ValidatorDef in fieldvalidators.xml. See “<ValidatorDef>” on page 297.
See also
• See “Overriding data type attributes” on page 240 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>
The <localization> element contains the following attributes:
<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.
<column> 207
Configuration Guide 9.0.5
Attributes of <edgeForeignKey>
The <edgeForeignKey> element contains the following attributes.
fkentity Required. The entity to which this foreign key points. None
getterScriptability See “Data objects and scriptability” on page 180 for information. all
ignoreforevents If you change (or add, or remove) an entity X that does not generate events, false
then ClaimCenter searches for all event-generating entity instances that
specify X. If ClaimCenter finds any of these event-generating entity instances,
it generates Changed events for those entity instances.
To determine what entities reference a non-event-generating entity,
ClaimCenter examines the foreign keys and arrays that point to the entity.
However, if you set ignoreForEvents to true on an entity that references the
non-event-generating entity, then ClaimCenter 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.
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 ClaimCenter 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
<edgeForeignKey> 209
Configuration Guide 9.0.5
overlapTable Whether the edge entity is marked OverlapTable for archiving. false
overwrittenInStagingTable Internal. If true and the edge table is loadable, the loader process auto- false
populates the staging table during import.
IMPORTANT If set to true, do not attempt to populate the table yourself, as
the loader import process overwrites this table.
setterScriptability See “Data objects and scriptability” on page 180 for information. all
soapnullok Unused.
Subelements of <edgeForeignKey>
<edgeForeignKey> subelement Attributes Description
fulldescription None See “<fulldescription>” on page 213.
tag None See “<tag>” on page 218.
<events>
If the <events> element appears within an entity, it indicates that the entity raises events. Usually, the code indicates
the standard events (add, change, and remove) by default. If the <events> element does not appear in an entity, that
entity does not raise any events. You cannot modify the set of the events associated with a base entity through
extension. However, you can add additional events to a base entity through extension, even if that entity already
contains a set of predefined 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: ClaimCenter 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>
There are no attributes on the <events> element.
Subelements of <events>
The <events> element contains the following subelements.
event Defines an additional event to fire for the entity. Use multiple <event> elements to specify multiple
events. This subelement contains the following attributes:
• description (required = true)
• name (required = true)
The attributes are self-explanatory. The <event> element requires each one.
<foreignkey>
The <foreignkey> element defines a foreign key reference to another entity.
Attributes of <foreignkey>
The <foreignkey> element contains the following attributes.
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 false
database statistics.
Note: It is possible to override this attribute on an existing column in an
extension (*.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
previously 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 mainte
nance_tools command.
See also
• “Working with attribute and element overrides” on page 239
• System Administration Guide
deprecated If true, then ClaimCenter marks the item as deprecated in the Data Dictionary false
and places a Deprecated annotation on it in the Guidewire Studio API
Reference.
If you deprecate an item, use the description to explain why.
ignoreforevents If you change (or add, or remove) an entity X that does not generate events, false
then ClaimCenter searches for all event-generating entity instances that
specify X. If ClaimCenter finds any of these event-generating entity instances,
it generates Changed events for those entity instances.
To determine what entities reference a non-event-generating entity,
ClaimCenter examines the foreign keys and arrays that point to the entity.
However, if you set ignoreForEvents to true on an entity that references the
non-event-generating entity, then ClaimCenter 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.
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 false
foreign 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 true
contain 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
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
because 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.
soapnullok Unused.
triggersValidation Whether changes to the entity referred to by this foreign key trigger false
validation.
Subelements of <foreignkey>
The <foreignkey> element contains the following subelements.
<fulldescription>
ClaimCenter 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 213 subelement. ClaimCenter 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="gw.api.domain.financials.CostAdapter">
...
</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="gw.lob.ba.financials.BACostAdapter" />
...
</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:
impl="gw.lob.ba.financials.BACostMethodsImpl"/>
</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.
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 ClaimCenter to create an index on the physical database table. This index is in
addition to those indexes that ClaimCenter 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, ClaimCenter frequently searches non-retired claims for one with a particular claim number. Therefore,
the Claim entity defines an index containing both the Retired and ClaimNumber fields. However, another common
search uses just ClaimNumber. Since that field is already part of another index, a separate index containing only
ClaimNumber 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, ClaimCenter 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
verifyInLoader If true, then ClaimCenter runs an integrity check for unique indexes before loading data true
from the staging tables.
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: ClaimCenter 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 If the ignoreForEvents attribute is false, ClaimCenter regards the <onetoone> element false
as being present when generating events. In this case, the product does not generate
events for the entity to which the fkentity attribute points.
If the ignoreForEvents attribute is true, ClaimCenter ignores the presence of the <oneto
one> element when generating events. This behavior results in ClaimCenter generating
events for the entity to which the fkentity attribute points.
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 <entit
y> and <array> elements. Although they share the same name, the two ignoreForEven
ts 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 ClaimCenter deletes the linked object as well.
• If you update the object pointed to by the <onetoone> element, then ClaimCenter
considers the owning object updated as well.
setterScriptability See “Data objects and scriptability” on page 180 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.
<index desc="Covering index to speed up checking-out of work items and they involve search on status"
name="WorkItemIndex2" unique="true">
<indexcol keyposition="1" name="status"/>
<indexcol keyposition="2" name="Priority" sortascending="false"/>
<indexcol keyposition="3" name="CreationTime"/>
<indexcol keyposition="4" name="ID"/>
</index>
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. This allows you to define your own metadata to add to the data
model.
// On the entity info metadata, get the metadata for the properties on this entity.
// This type is an iterator of objects of type IEntityPropertyInfo.
var props = User.Type.EntityProperties
// Get the data model tags, which has the type java.util.Map
var myTags = theProp.DatamodelTags
Attributes of <tag>
The <tag> element contains the following attributes.
<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>
The <typekey> element contains the following attributes.
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 180 for information. None
soapnullok Unused.
typefilter The name of a filter associated with the typelist. See “Static filters” on page 314 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.
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 223
“Subtype mapping associative arrays” on page 225
“Typelist mapping associative arrays” on page 227
telephonebook[peter] = 555-123-1234
telephonebook[shelly] = 555-234-2345
...
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.
ClaimCenter 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
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→Claim.eti), you see
the following XML (simplified for clarity):
<entity xmlns="http://guidewire.com/datamodel"
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 225.
• “Typelist mapping associative arrays” on page 227.
• 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 ClaimCenter Data Dictionary.
See also
• Gosu Reference Guide
base-entity.subtype-map.property
Field Description
base-entity The base object on which the associative array exists, for example, 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
contains the following properties (among others):
• ClaimMetricCategory
• DispalyTargetValue
• DisplayValue
Note: To see a list of subtypes for any given object, consult the ClaimCenter Data Dictionary. To determine the
list of fields (properties) on an object, again consult the Data Dictionary.
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.
uses gw.transaction.Transaction
uses gw.api.database.Query
The output of running this code in the Gosu Scratchpad looks similar to the following:
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 gw.api.database.Query
uses gw.transaction.Transaction
//Query result is read-only, need to get current bundle and add object to bundle
Transaction.runWithNewBundle(\bundle -> {
if (clm != null) {
clm = bundle.add(clm)
}
}, "su")
The output of running this code in the Gosu Scratchpad looks similar to the following:
See also
• Gosu Reference Guide
<entity xmlns="http://guidewire.com/datamodel"
entity="Claim"
table="claim"
type="retireable">
...
<array arrayentity="ClaimMetric"
desc="Metrics related to this claim."
exportable="false"
ignoreforevents="true"
name="ClaimMetrics">
...
<array-association>
<typelist-map field="ClaimMetricCategory"/>
</array-association>
</array>
...
</entity>
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
Typelist mapping associative arrays 227
Configuration Guide 9.0.5
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="http://guidewire.com/datamodel"
...
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.
entity.typecode.property
Field Description
entity The object on which the associative array exists, for example, 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 C
laimMetricCategory typelist).
property A field or property on the array object. For example, the ClaimMetric object contains the following properties
(among others):
• ReachRedTime
• ReachYellowTime
• Skipped
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 gw.api.database.Query
uses gw.transaction.Transaction
The output of running this code in the Gosu Scratchpad looks similar to the following:
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 gw.api.database.Query
uses gw.transaction.Transaction
print(thisReserveLine)
print(thisReserveLine.cashout.CreateTime)
The output of running this code in the Gosu Scratchpad looks similar to the following:
uses gw.transaction.Transaction
uses gw.api.database.Query
Transaction.runWithNewBundle(\bundle -> {
if (thisClaim != null) {
thisClaim = bundle.add(thisClaim)
}
}, "su")
//Print out the current values for the ClaimMetric.ReachYellowTime field on each subtype
for (color in thisClaim.OverallClaimMetrics) {
print("Subtype - " + color.Subtype.DisplayName + ": ReachYellowColor = " + color.ReachYellowTime)
}
//Modify the ClaimMetric.ReachYellowColor value and print out the new values
for (color in thisClaim.OverallClaimMetrics) {
color.ReachYellowTime = todaysDate
print("Subtype - " + color.Subtype.DisplayName + ": ReachYellowColor = " + color.ReachYellowTime)
}
The output of running this code in the Gosu Scratchpad looks similar to the following:
See also
• Gosu Reference Guide
Procedure
1. Create an entity, Ext_Automation.
2. Create another entity, Ext_AutomationCheckResult.
3. Add to Ext_Automation an array of the Ext_AutomationCheckResult entity.
4. Create one <foreignkey> element for the Ext_AutomationCheckResult entity that points back to the
Ext_Automation entity.
5. Create a typelist named Ext_AutomationResultType.
6. Add three type codes to the Ext_AutomationResultType typelist: CoverabilityResult,
HandleabilityResult, PayabilityResult.
7. Add a <typekey> element to the Ext_AutomationCheckResult entity.
8. With this <typekey> element, refer to the Ext_AutomationResultType typelist.
9. Under the array of Ext_AutomationCheckResult in the Ext_Automation entity definition, declare a <link-
association> subelement.
10. Under the <link-association> subelement, declare a <typelist-map> that refers to your <typekey> field
from step 7.
11. Add an <index> subelement to the Ext_AutomationCheckResult entity.
12. To ensure unique index entries, set the unique attribute on the <index> subelement to true.
13. Add as index columns the Ext_Automation foreign key and the typekey corresponding to the
Ext_AutomationResultType typelist.
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.
base-entity.defined-property
Field Description
base-entity The base object on which the associative array exists, for example, 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 233
“Defining a new data entity” on page 236
“Extending a base configuration entity” on page 238
“Working with attribute and element overrides” on page 239
“Extending the base data model: examples” on page 242
“Removing objects from the base configuration data model” on page 253
“Deploying data model changes to the application server” on page 257
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.
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 249
• “The archive domain graph and reference data” on page 327
WARNING Do not directly modify the physical database that ClaimCenter uses. Only make changes to the
ClaimCenter data model through Guidewire Studio.
• Field encryption
• Typelists
In addition to these generic changes, the following specific localization changes trigger a database upgrade:
• In file localization.xml, any change to the <LinguisticSearchCollation> subelement on the <GWLocale>
element of the default application locale forces a database upgrade at application server startup.
• In file collations.xml, any change to the source definition of the DBJavaClass definition forces a database
upgrade at application server startup.
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.
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
object subelements” on page 199.
5. Deploy your changes to the application server. You must redeploy the application after you make any change
to the Guidewire ClaimCenter data model. See “Deploying data model changes to the application server” on
page 257 for details.
Property Description
ID Internally managed primary key
CreateTime Timestamp indicating when the object was created. This
property is only applicable for editable and retireable entity
types.
CreateUser User who created the object. This property is only applicable
for editable and retireable entity types.
LoadCommandID Identifier for the command that loaded the object through the
staging tables. This property is included for entities where the
loadable attribute has a value of true.
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 Description
property has a zero value. The Retired property is only
applicable for 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 retireable entity types.
UpdateTime Timestamp when the object was last updated. This property is
only applicable for editable and retireable entity types.
UpdateUser User who last updated the object. This property is only
applicable for editable and retireable entity types.
Note: New entities have constant properties that the ClaimCenter 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 .
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 simply
overwrite a Guidewire extension with your own extension without understanding the full implications of the
change.
ClaimCenter extensions allow you to add new fields to the base data entities. You can add custom fields to
extendable entities only. Not all entities are extendable, but most of the important business entities such as Claim,
User, Contact, and others are extendable. (You can determine if an entity is extendable 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, then edit that file to extend the entity.
• If an extension file for the entity does not exist, then create the new extension file and populate it accordingly.
Do not attempt to create multiple extension files for the same entity. You can reference a given existing entity in
only one extension (.etx or .ttx) file. If you attempt to extend (or define) the same entity in multiple files, then the
ClaimCenter application server generates an error at application start up. In all cases, Studio refuses to create entity
or extension files with the same duplicate name.
Procedure
1. In the Studio Project tool window, navigate to configuration→config→Metadata→Entity, and then locate the entity
that you want to extend.
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 ClaimCenter data model. See
“Deploying data model changes to the application server” on page 257 for details.
<column-override> createhistogram
default
desc
name
nullok
supportsLinguisticSearch
type
<edgeForeignKey-override> desc
extractable
<foreignkey-override> desc
importableagainstexistingobject
name
nullok
triggersValidation
<onetoone-override> desc
name
triggersValidation
<typekey-override> default
desc
name
nullok
typefilter
<keyfilters-override>
<keyfilters-override> <keyfilter>
Note: You can override the type attribute of a <column-override> element. However, you can do so only with a
data type that has the same value type as the previous data type of the type attribute.For example, suppose that the
data type of the type attribute is shorttext. Because the shorttext data type has a value type of
java.lang.String, the data type in the attribute override value must also have the java.lang.String value type.
While longtext would be an acceptable data type, BigDecimal would not.
<column createhistogram="true"
desc="Tax ID for the contact (SSN or EIN)."
name="TaxID"
type="ssn"/>
To encrypt the contents of this column (a reasonable course of action), create a Contact extension (Contact.etx)
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 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 ClaimCenter 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 Account.eti.
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.
<?xml version="1.0"?>
<extension xmlns="http://guidewire.com/datamodel" entityName="Account">
<array-override name="RoleAssignments" triggersValidation="false">
</extension>
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
desc="Associates an entity with appropriate lists of languages."
name="Languages"
nullok="false">
<keyfilters>
<keyfilter name="United States Languages"/>
</keyfilters>
</typekey>
<typekey-override
name="Languages">
<keyfilters-override>
<keyfilter name="Canada Languages"/>
</keyfilters-override>
</typekey-override>
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 ClaimCenter. 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.
Related concepts
“Creating a new delegate object” on page 243
“Extending a delegate object” on page 245
“Defining a subtype” on page 248
“Defining a reference entity” on page 249
“Implementing a many-to-many relationship between entity types” on page 251
“Extending an existing view entity” on page 252
Related tasks
“Define an entity array” on page 250
Procedure
1. In Guidewire Studio, in the Project tool window, navigate to configuration→config→Extensions→Entity.
2. Right-click Entity, and then click New→Entity.
3. In the Entity text box, type the name of the delegate.
4. In the Entity Type drop-down list, click delegate.
5. Click OK.
6. Add fields to your new delegate. In the Field drop-down list, select the field type to add, and then click Add .
For information on the possible XML elements that you can add to your new entity definition, see “Data
object subelements” on page 199.
Next steps
After completing this task, complete “Step 2: Define the delegate functionality” on page 244.
Java class In the base configuration, Guidewire provides a Java class implementation for each delegate to provide
implementation the 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 enhancement You must implement the delegate functionality through a Gosu enhancement that defines any
implementation functionality associated with the fields on the delegate. By providing the name of the delegate entity to
the enhancement as you create it, you inform Studio that you are adding functionality for that particular
delegate. Studio automatically 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 MyDelgateEnhancement.
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 244.
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 .
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 245.
• ISOMatchReport
• ISOReportable
• IntegerMetricDelegate
• IntegerMetricLimitDelegate
• MetricLimitTimeDelegate
• MoneyMetricDelegate
• MoneyMetricLimitDelegate
• PercentMetricDelegate
• PercentMetricLimitDelegate
• TimeBasedMetricDelegate
• TripAccommodationDelegate
• TripExpenseCancellationDelegate
• TripExpenseDelegate
• TripSegmentDelegate
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>. ClaimCenter generates an error if you attempt to do so.
EFTDataDelegate.etx extensions Extends EFTDataDelegate and adds additional fields and behaviors.
EFTData.eti metadata/cc Defines an EFTData object that implements EFTDataDelegate.
Contact.etx extensions Extends the Contact entity and adds an array of EFTData objects.
<delegate
xmlns="http://guidewire.com/datamodel"
extendable="true"
javaClass="com.guidewire.cc.domain.contact.EFTDataDelegate"
name="EFTDataDelegate">
<fulldescription>
<![CDATA[Delegate used by Contact and Check to store Electronic funds transfer data]]>
</fulldescription>
</delegate>
Notice that, in this case, Java class com.guidewire.cc.domain.contact.EFTDataDelegate implements the plugin
functionality. In actual practice, if you define your own delegate, you need to implement the delegate functionality
in Gosu code.
Also, notice that this delegate is extendable.
<extension
xmlns="http://guidewire.com/datamodel"
entityName="EFTDataDelegate">
<column
desc="The name on the account"
name="AccountName"
type="varchar">
<columnParam name="size" value="100"/>
</column>
<column
desc="The name of the bank"
name="BankName"
type="varchar">
<columnParam name="size" value="100"/>
</column>
<typekey
desc="The type of bank accout e.g. checking, savings etc"
name="BankAccountType"
typelist="BankAccountType"/>
<column
desc="The bank account number"
name="BankAccountNumber"
type="varchar">
<columnParam name="size" value="20"/>
<columnParam name="encryption" value="true"/>
</column>
<column
desc="The routing number is a nine digit bank code used in the United States"
name="BankRoutingNumber"
type="positiveinteger"/>
<column
desc="Indicates if this is the primary EFT record for the contact"
name="IsPrimary"
type="bit"/>
</extension>
Notice that the delegate extension adds a number of fields to the delegate that are accessible to any entity that
implements this delegate, for example, AccountName and BankAccountType, among others.
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.
ClaimCenter 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. ClaimCenter 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 ClaimCenter bases the subtype entity). For a description of required and
optional attributes, see “Subtype data objects” on page 193.
Within the <subtype> definition, you must define its fields and other elements. For a description of the elements
you can include, see “Data object subelements” on page 199.
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.
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.
See also
•
Procedure
1. Define the entity to use as a member of the array. Although you can use one of the ClaimCenter 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. ClaimCenter 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 Claim 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 Claim entity. It is possible that a
Claim 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 Claim extension file already exists, use CTRL-N to search for Claim.etx.
• 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 Claim.etx.
Next, modify the array entity definition so it includes a foreign key that refers to Claim:
<entity xmlns="http://guidewire.com/datamodel"
entity="ClaimContact"
table="claimcontact"
type="retireable"
desc="Join entity modeling many-to-many relationship between Claim and Contact entities">
<foreignkey columnName="ClaimID"
fkentity="Claim"
name="Claim"
nullok="false"/>
<foreignkey columnName="ContactID"
fkentity="Contact"
name="Contact"
nullok="false"/>
<index name="claimcontacts" unique="true">
<indexcol keyposition="1" name="ClaimID"/>
<indexcol keyposition="2" name="ContactID"/>
</index>
</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:
Extending the base data model: examples 251
Configuration Guide 9.0.5
<extension entityName="Activity">
...
<column type="bit"
name="validExt"
default="true"
nullok="true"
desc="Sample bit extension, with a default value."/>
...
</extension>
Next, search for ActivityDesktopView.etx. Suppose that you do not find this file, but you see that
ActivityDesktopView.eti exists. As this is part of the base configuration, you cannot modify this declaration file.
However, find the highlighted file in Studio and select New→Entity Extension from the right-click submenu. This
opens a mostly blank file.
Enter the following in ActivityDesktopView.etx:
<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 ClaimCurrency column on the view entity, the view entity loads the claim currency as a part of the
view entity. This makes the claim currency available to the currencyamount column and ClaimCenter avoids
loading the whole entity while dereferencing Claim.Currency.
The complete extension of the PriorClaimView view entity for this example is as follows:
<viewEntityExtension entityName="PriorClaimView">
<viewEntityColumn name="OpenReserves" path="ClaimRpt.OpenReserves"/>
<viewEntityTypekey name="ClaimCurrency" path="Currency"/>
</viewEntityExtension>
Base configuration extension extensions .etx “Remove an extension to a base object” on page 254
Guidewire recommends that you review the material in “Implications of modifying the data model” on page 255
before you remove an object from the data model.
IMPORTANT ClaimCenter 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
ClaimCenter 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 255
Related tasks
“Remove a base extension entity” on page 254
“Remove an extension to a base object” on page 254
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.
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="http://guidewire.com/datamodel" 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.
As with the case with extension entities in the Extensions folder, there are two ways to handle the removal of entity
extensions:
• For .etx files that Guidewire added as part of the base configuration, you need to edit the file, remove the
current content, and insert a <deleteEntity> element in its place.
• For .etx files that you added as part of your customization process, you need merely delete the file.
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 Contact.etx 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="http://guidewire.com/datamodel" 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.
However, there are situations in which you modify a data object and the application upgrade process cannot make
the corresponding database modification for you. Currently, the database upgrade tool is unable to implement
extension modifications that require it to do any of the following:
• Change a column from nullable to non-nullable if null values exist in the database column or if there is not a
default value. ClaimCenter refuses to start if there are null values in a non-nullable column.
• Change the underlying data type of a column, for example, changing a varchar column to clob or varchar
column to int.
• Shorten the length of a varchar/text-based column (for example, mediumtext to shorttext) if this truncates
data in the column. If shortening the length does not require truncating existing data, the upgrader can handle
both shortening the length of a varchar column and increasing the length of a varchar column. (It can increase
the length up to 8000 characters for SQL Server.)
WARNING Be very careful of making changes to the data model on a live production database. You can
invalidate your installation.
4. Open an SQL command line appropriate to your server. For example, if you use Microsoft SQL Server, then
open a query through the SQL Enterprise Manager.
5. Run your SQL statement to remove your extension.
6. Regenerate the toolkit.
In a production environment, Guidewire recommends that you include formal testing and quality assurance before
removing or modifying an extension. Also, involve your company database administrator (DBA) and any impacted
departments. Guidewire recommends also that you document your change and the reasons for it.
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.
If necessary (and it is almost always necessary if you change the data model), ClaimCenter 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.
fulldescription Simple entity that you can assign. This entity does not have a foreign ke
y.
impl gw.assignment.NewAssignableMethodsImpl
type datetime
nullok true
type varchar
nullok true
value 60
typelist Country
nullok true
typelist PhoneType
nullok true
keyposition 1
Result
Notice the following:
• Entity UserAssignableEntity_Ext implements the CCAssignable delegate.
• Entity UserAssignableEntity_Ext uses class NewAssignableMethodsImpl, which implements the
CCAssignableMethods interface, to define the necessary assignment methods and properties.
Next steps
• “Step 2: Create assignment class NewAssignableMethodsImpl” on page 261
• “Step 3: Test assignment of your extension entity instance” on page 263
See also
• For information on how to extend the data model, see “Modifying the base data model” on page 233.
• For information on the data model in general, see “The ClaimCenter data model” on page 171.
Procedure
1. Create a new class file in the package gw.assignment 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 gw.api.assignment.CCAssignableMethods.
• Extend the abstract superclass gw.api.assignment.CCAssignableMethodsBaseImpl.
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.
construct(testEntity : UserAssignableEntity_Ext) {
super(testEntity)
}
7. To resolve the error indication, press Alt-Enter and click Import class. Import the class
gw.pl.persistence.core.Key.
Result
Your new class looks like the following code.
package gw.assignment
uses gw.api.assignment.CCAssignableMethods
uses gw.api.assignment.CCAssignableMethodsBaseImpl
uses gw.entity.ILinkPropertyInfo
uses gw.pl.persistence.core.Key
construct(testEntity : UserAssignableEntity_Ext) {
super(testEntity)
}
return false
}
}
Next steps
• “Step 3: Test assignment of your extension entity instance” on page 263
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 gw.api.database.Query
uses gw.api.database.Relop
uses gw.transaction.Transaction
7. Click Run.
Output similar to the following lines appears in the Console tab.
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 DynamicAssignmentState.etx 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 DynamicAssignmentState.etx appears in the list, double-click that file.
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 GroupAssignmentState.etx. If this file does not exist, you need to create it. Follow the
instructions in In Guidewire Studio, open DynamicAssignmentState.etx for editing or create a new entity
extension. to search for GroupAssignmentState.etx.
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
Making your extension entity type eligible for round-robin assignment 265
Configuration Guide 9.0.5
fkentity Group
nullok true
columnName LastTCAGrpId
type integer
nullok true
type integer
nullok true
5. Add fields to the file GroupUserAssignmentState.etx. If this file does not exist, you need to create it.
Follow the instructions in In Guidewire Studio, open DynamicAssignmentState.etx for editing or create a
new entity extension. to search for GroupUserAssignmentState.etx.
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 266
• “Step 3: Create class UserAssignableEntityExtEnhancement” on page 268
• “Step 4: Test round-robin assignment” on page 269
Procedure
1. Create a new class file in the package gw.assignment 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 gw.assignment
uses gw.api.assignment.AssignmentType
uses gw.entity.IEntityType
uses gw.pl.persistence.core.Key
construct() {}
Making your extension entity type eligible for round-robin assignment 267
Configuration Guide 9.0.5
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 268
• “Step 4: Test round-robin assignment” on page 269
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.
For this example, enter the following class name.
UserAssignableEntityExtEnhancement
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 gw.assignment
uses gw.api.assignment.AssignmentType
Next steps
• “Step 4: Test round-robin assignment” on page 269
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 gw.api.database.Query
uses gw.api.database.Relop
uses gw.transaction.Transaction
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:
Making your extension entity type eligible for round-robin assignment 269
Configuration Guide 9.0.5
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.
exportable true
fulldescription Simple test assignable with a foreign key back to Claim. This foreign ke
y, together with the CCAssignableMethods delegate in TestClaimAssignable
MethodsImpl, 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 gw.assignment.TestClaimAssignableMethodsImpl
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 271
• “Step 3: Create new assignment type for extension entity type TestClaimAssignable_Ext” on page 272
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 274
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 274
• “Step 6: Add the necessary permission for the extension entity type” on page 276
• “Step 7: Test assignment of the assignable entity type” on page 278
Creating an assignable extension entity type that uses foreign keys 271
Configuration Guide 9.0.5
Procedure
1. In Guidewire Studio, open Claim.etx 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 Claim.etx 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 Activity.etx. If this file does not exist, you need to create it. Follow the instructions in
In Guidewire Studio, open Claim.etx for editing or create a new entity extension. to search for
Activity.etx.
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 272
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 274
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 274
• “Step 6: Add the necessary permission for the extension entity type” on page 276
• “Step 7: Test assignment of the assignable entity type” on page 278
Step 3: Create new assignment type for extension entity type TestClaimAssignable_Ext
The AssignmentType class contains getter and setter methods that inform the round-robin mechanism of the
location of fields in the AssignmentState entity types.
Procedure
1. Create a new class file in the package gw.assignment and name it
TestClaimAssignableExtAssignmentType.
a. In Studio, navigate to configuration→gsrc→gw→assignment.
b. Right-click assignment and select New→Gosu Class.
272 chapter 18 Example: Creating assignable entities
Configuration Guide 9.0.5
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 gw.assignment
uses gw.api.assignment.AssignmentType
uses gw.entity.IEntityType
uses gw.pl.persistence.core.Key
construct() { }
Creating an assignable extension entity type that uses foreign keys 273
Configuration Guide 9.0.5
}
}
Next steps
• “Step 4: Create enhancement class TestClaimAssignableExtEnhancement” on page 274
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 274
• “Step 6: Add the necessary permission for the extension entity type” on page 276
• “Step 7: Test assignment of the assignable entity type” on page 278
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 gw.assignment
uses gw.api.assignment.AssignmentType
Next steps
• “Step 5: Create delegate class TestClaimAssignableMethodsImpl” on page 274
• “Step 6: Add the necessary permission for the extension entity type” on page 276
• “Step 7: Test assignment of the assignable entity type” on page 278
Procedure
1. Create a new class file in the package gw.assignment 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 gw.assignment
uses gw.api.assignment.CCAssignableMethods
uses gw.api.assignment.CCAssignableMethodsBaseImpl
uses gw.entity.ILinkPropertyInfo
uses gw.pl.persistence.core.Key
/**
* 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)
}
Creating an assignable extension entity type that uses foreign keys 275
Configuration Guide 9.0.5
return Owner.Claim
}
Studio indicates that your newly created class contains a serious error because there is no method definition
for AssignmentPopupUtil.pushAssignTestClaimAssignables. You need to provide at least a skeleton body
of this method. The next step resolves this issue.
3. Open gw.assignment.AssignmentPopupUtil for editing and add the following code.
Next steps
• “Step 6: Add the necessary permission for the extension entity type” on page 276
• “Step 7: Test assignment of the assignable entity type” on page 278
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 security-config.xml.
The file security-config.xml 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.
Field Entry
code ext_entity_perms
6. To see your new system permission in Guidewire ClaimCenter, 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 ClaimCenter, using an administrative account.
Creating an assignable extension entity type that uses foreign keys 277
Configuration Guide 9.0.5
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.
9. Click the Administration tab and navigate to Users & Security→Roles.
10. Assign the Own ext entity system permission to a specific user role such as Adjuster.
11. Assign that role with the necessary permission to a specific user such as aapplegate.
Next steps
• “Step 7: Test assignment of the assignable entity type” on page 278
Procedure
1. In Studio, click Tools→Gosu Scratchpad to open the Studio Gosu Scratchpad.
2. Enter the following code in the Gosu Scratchpad tab.
3. Click Run.
Output similar to the following lines appears in the Console tab.
Creating an assignable extension entity type that uses foreign keys 279
Configuration Guide 9.0.5
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 281
“The data types configuration file” on page 284
“Customizing base configuration data types” on page 285
“Working with the medium text data type (Oracle)” on page 287
“Working with the VARCHAR data type (SQL Server)” on page 288
“The data type API” on page 288
“Defining a new tax identification number data type” on page 290
Related tasks
“Define a new data type” on page 289
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.
Axis Description
Persistence A data type can specify how ClaimCenter 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 ClaimCenter interface treats a value. For example, a String data type can
specify 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 java.util.Date. Thus, you see the following XML code in the
datetime.dti file.
<DataTypeDef xmlns="http://guidewire.com/datatype"
type="com.guidewire.pl.metadata.datatype2.impl.DateTimeDataTypeDef"
valueType="java.util.Date">
...
In a similar manner, the decimal data type has an associated type of java.math.BigDecimal.
<DataTypeDef xmlns="http://guidewire.com/datatype"
type="com.guidewire.pl.metadata.datatype2.impl.DecimalDataTypeDef"
valueType="java.math.BigDecimal">
...
Operation Description
Customize an Modify the data type definition in file datatypes.xml, which you access through Studio. You can modify
existing data type only a select subset of the base configuration data types.
See “Customizing base configuration data types” on page 285.
Create a new Create a .dti definition file and place it in modules→configuration→config→datatypes. You also need to
data type create Gosu code to manage the data type.
See “Define a new data type” on page 289.
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.
<extension entityName="Claim">
<column name="NewCompanyName" type="CompanyName" nullok="true" desc="Name for the new company."/>
</extension>
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.
282 chapter 19 Data types
Configuration Guide 9.0.5
gw.datatype.annotation.DataType
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 ClaimCenter does not enforce this restriction at compile time. (However, ClaimCenter 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.
ClaimCenter lets you modify certain attributes on a subset of the base configuration data types by using the
datatypes.xml configuration file. You can access this file in Studio from configuration→config→fieldvalidators. You
can modify the values of certain attributes in this file to customize how these data types work in ClaimCenter.
This datatypes.xml file contains the following elements:
WARNING Modify the datatypes.xml file with caution. If you modify the file incorrectly, you can invalidate
your ClaimCenter installation.
<...DataType>
The <...DataType> element is the basic element of the datatypes.xml 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 datatypes.xml 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.
Related concepts
“Field validation” on page 295
Related references
“List of customizable data types” on page 286
There are special requirements for these attributes in working with monetary amounts. For more information, see the
Globalization Guide.
//File datatypes.xml
<DataTypes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../platform/pl/xsd/datatypes.xsd">
...
<PhoneDataType length="30" validator="Phone"/>
...
</DataTypes>
//File fieldvalidators.xml
<FieldValidators>
...
<ValidatorDef description="Validator.Phone" input-mask="###-###-#### x####" name="Phone"
value="[0-9]{3}-[0-9]{3}-[0-9]{4}( x[0-9]{0,4})?"/>
...
</FieldValidators>
gw.datatype.DataTypes.get(gw.lang.reflect.IAnnotatedFeatureInfo)
For example:
It may seem odd that the getLength(java.lang.Object, gw.lang.reflect.IPropertyInfo) 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 gw.datatype.IConstrainedDataType and gw.datatype.IPresentableDataType 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 ClaimCenter. 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 age.dti.
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 gw.datatype.def.IDataTypeDef 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:
• gw.datatype.handler.IDataTypeConstraintsHandler
• gw.datatype.handler.IDataTypePersistenceHandler
• gw.datatype.handler.IDataTypePresentationHandler
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:
gw.datatypes.impl.*
Result
After you create the data type, you will want to use the data type in some useful way.
For example, you can create an entity property that uses that data type and then expose that property as a field within
ClaimCenter.
Next steps
For a discussion of constraints, persistence, and presentation as it relates to data types, see “Overview of data types”
on page 281.
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 TaxID.dti 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="http://guidewire.com/datatype" type="gw.newdatatypes.TaxIDDataTypeDef"
valueType="java.lang.String">
<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="java.lang.String"/>
</DataTypeDef>
parameter contactType
Next steps
After completing this task, complete “Step 2: Implement the IDataTypeDef Interface” on page 291.
See also
• For details on the attributes and elements relevant to the data type definition, see “The ClaimCenter data model”
on page 171.
For our example data type, the gw.newdatatypes.TaxIDDataTypeDef class looks similar to the following. To create
this file, first create the package, then the class file, in the Studio Classes folder.
package gw.newdatatypes
uses gw.datatype.def.IDataTypeDef
uses gw.datatype.handler.IDataTypeConstraintsHandler
uses gw.datatype.handler.IDataTypePresentationHandler
uses gw.datatype.handler.IDataTypePersistenceHandler
uses gw.lang.reflect.IPropertyInfo
uses gw.datatype.handler.IDataTypeValueHandler
uses gw.datatype.def.IDataTypeDefValidationErrors
uses gw.datatype.impl.VarcharPersistenceHandler
uses gw.datatype.impl.SimpleValueHandler
// Check that the CountryProperty names an actual property on the owning type, and that
// the type of the property is typekey.Country.
var countryProp = prop.OwnersType.TypeInfo.getProperty(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 293.
gw.datatype.IConstrainedDataType
However, if you define a new data type, you must implement the following:
gw.datatype.handler.IDataTypeConstraintsHandler
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 gw.newdatatypes
uses gw.datatype.handler.IStringConstraintsHandler
uses gw.lang.reflect.IPropertyInfo
uses java.lang.Iterable
uses java.lang.Integer
uses java.lang.CharSequence
uses gw.datatype.DataTypeException
construct(countryProperty : String) {
_countryProperty = countryProperty
}
switch (country) {
case "US": validateUSTaxID(ctx, prop, value as java.lang.String)
break
// other countries ...
}
switch (country) {
return null
Class TaxIDPresentationHandler
This class looks similar to the following:
package gw.newdatatypes
uses gw.lang.reflect.IPropertyInfo
uses gw.datatype.handler.IStringPresentationHandler
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
This topic describes field validators in the ClaimCenter data model and how you can extend them.
See also
• Globalization Guide
Related concepts
“Field validators” on page 295
“Field validator definitions” on page 296
“Modifying field validators” on page 299
Field validators
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 ClaimCenter 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.
<FieldValidators>
<ValidatorDef name="Email"
description="Validator.Email"
input-mask=""
value=".+@.+"/>
<ValidatorDef name="SSN"
description="Validator.SSN"
input-mask="###-##-####"
value="[0-9]{3}-[0-9]{2}-[0-9]{4}|[0-9]{2}-[0-9]{7}?"
/>
...
</FieldValidators>
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. ClaimCenter persists this
value to the database, including any defined delimiters or characters other than the # character.
input-mask An input-mask, which is optional, assists the user in entering valid data. ClaimCenter displays the input mask
when 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, ClaimCenter 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 297
“<ValidatorDef>” on page 297
<FieldValidators>
The <FieldValidators> element is the root element in the fieldvalidators.xml 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 297
• “floor, ceiling” on page 297
• “input-mask” on page 298
• “name” on page 298
• “placeholder-char” on page 298
• “validation-level” on page 298
• “validation-type” on page 298
• “value” on page 298
The following sections describe these attributes.
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. ClaimCenter 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="Validator.Money"
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.
ClaimCenter 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. ClaimCenter 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.
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 gw.api.validation.PhoneValidator for an example. Ensure that any
Gosu validators that you define are low-latency for performance reasons.
regex (default) The value of the <ValidatorDef> defines a regular expression that ClaimCenter uses to validate data
entered 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.
ClaimCenter 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.
ClaimCenter uses the Java regex package described in the following location for regular expression parsing:
https://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
() Parentheses define the order in which ClaimCenter 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 3
xx. ([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).
. A period is a wildcard character. For example:
• .* means anything.
• .+ means anything but the empty string.
• ... means any string with three characters.
<!-- Modify a validator definition. Adding a ValidatorDef element with the same name as one defined
in the base fieldvaldators.xml file replaces the base validator. -->
<extension entityName="SomeEntity">
<column-override name="SomeColumn">
<columnParam name="validator" value="SomeCustomValidator"/>
</column-override>
</extension>
Suppose that you want to create a validator for a Date of Birth field (Person.DateOfBirth). To create this validator,
you need to perform the following steps in Studio.
Procedure
1. Create a Person.etx 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.
<column-override name="EmailAddressHome">
<columnParam name="logicalSize" value="42"/>
</column-override>
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 ClaimCenter, 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 ClaimCenter 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 304
“Terms related to typelists” on page 304
“Typelists and typecodes” on page 305
“Typelist definition files” on page 305
“Different kinds of typelists” on page 305
“Working with typelists in Studio” on page 307
“Typekey fields” on page 310
“Removing or retiring a typekey” on page 313
“Typelist filters” on page 314
“Static filters” on page 314
“Dynamic filters” on page 319
“Typecode references in Gosu” on page 322
“Mapping typecodes to external system codes” on page 322
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 ClaimCenter data model.
Guidewire ClaimCenter 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
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 ClaimCenter interface, it is usually a typelist.
For example, the ClaimCenter Loss Details page that you access as you enter claim information contains several
different typelists. One of these is the Loss Cause typelist that provides the available values from which you can
choose as you enter claim information.
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:
• Contact.Country uses a simple list.
• Check.Status uses a list with a simple static filter, since only a subset of all transaction statuses make sense in
this context.
• Claim.LossCause uses a list filtered by LossType (that is, choices for this loss cause depend on the value of the
loss 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 claim in ClaimCenter 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 ClaimCenter.
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
“Different kinds of typelists” on page 305
“Typelists and typecodes” on page 305
“Static filters” on page 314
“Dynamic filters” on page 319
“Typekey fields” on page 310
Internal typecodes
Some typelists contain required internal typecodes that ClaimCenter references directly. Therefore, they must exist.
Studio displays internal typecodes in gray, non-editable cells. This makes it impossible for you to edit or delete an
internal typecode.
Localized typecodes
It is possible to localize the individual typecodes in a typelist. See the Globalization Guide for more information.
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 173
Internal typelists
A few of the typelists in the application are internal. Guidewire controls these typelists as ClaimCenter 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
ClaimCenter implements specific behavior for known activity types.
Studio disables your ability to add additional typecodes to internal typelists.
The following are examples of internal typelists that you cannot change:
• ActivityStatus
• AggregateLimitType
• AssignmentStatus
• Coverage
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. ClaimCenter includes default typelists with sample
typecodes in them. You can customize these typelists for your business needs by adding additional typecodes, if you
want.
306 chapter 21 Working with typelists
Configuration Guide 9.0.5
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 238.
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.
ClaimCenter limits the number of characters in a typecode to 50 or less.
Procedure
1. In Guidewire Studio, press Ctrl+Shift+N.
2. In the Enter file name dialog, start typing the name of the typelist that you want to find.
Studio displays a list of matching entries that begin with the character string that you type.
3. In the list, click the name of the typelist that you want to view.
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.
Procedure
1. In the Project tools window, navigate to configuration→config→Extensions→Typelist.
2. Right-click on Typelist, and then click New→Typelist.
3. Enter the typelist name in the New Typelist dialog. ClaimCenter uses this name to uniquely identify this typelist
in the data model.
4. Enter a description. Use the Description field to create a longer text description to identify how ClaimCenter
uses this typelist. This text appears in places like the Data Dictionary.
5. Verify that the (Boolean) Final field is set to false. Studio automatically sets this field to false for any typelist
that you create. You have no control over this setting. This field has the following meanings:
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.
Field Description
code A unique ID for internal Guidewire use. Enter a string containing only letters, digits, or the following characters:
• a dot (.)
• a colon (:)
Do not include white space or use a hyphen (-).
Use this code to map to your legacy systems for import and export of ClaimCenter data. The code must be
unique within the list. ClaimCenter limits the number of characters in a typecode to 50 or less.
See also “Mapping typecodes to external system codes” on page 322.
Field Description
name The text that is visible within ClaimCenter in the drop-down lists within the application. You can uses white space
and longer descriptions. However, limit the number of characters to an amount that does not cause the drop-
down list to be too wide on the screen. The maximum name size is 256 characters.
desc A longer description of this typecode. The maximum description size is 512 characters. ClaimCenter displays the
text in this field in the ClaimCenter Data Dictionary.
identifierCode Determines how typelist codes become Gosu programmatic identifier codes. See the Gosu Reference Guide.
priority A value that determines the sort order of the typecodes (lowest priority first, by default). You use this to sort the
codes within the drop-down list and to sort a list of activities, for example, by priority. If you omit this value,
ClaimCenter sorts the list alphabetically by name. If desired, you can specify priorities for some typecodes but
not others. This causes ClaimCenter to order the prioritized ones at the top of the list with the unprioritized ones
alphabetized afterwards.
retired A Boolean flag that indicates that a typecode is no longer in use. It is still a valid value, but not offered as a
choice in the drop-down list as a new value. ClaimCenter does not make changes to any existing objects that
reference this typecode. If you do not enter a value, ClaimCenter assumes the value is false (the default value).
Typekey fields
A typekey field is an entity field that ClaimCenter 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 ClaimCenter 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.
310 chapter 21 Working with typelists
Configuration Guide 9.0.5
See also
• “Example: Typekey field” on page 311
...
</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 219.
• For information on how to create data model entities, see “The ClaimCenter data model” on page 171.
• For information on how to modify existing data model entities, see “Modifying the base data model” on page
233.
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.
Remove a typekey
About this task
Suppose that you delete the email_sent typekey from the base configuration DocumentType typelist. If you remove
this typekey, then you must also update all others part of the application and disallow the production of documents
of that type. In particular, you must remove references to the typekey from any .descriptor file that references that
typekey. In this case, a search of the document template files finds that the
CreateEmailSent.gosu.htm.descriptor file references email_sent.
Procedure
1. Navigate to the typelist that contains the typekey that you want to retire.
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 the application 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
313 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 ClaimCenter filters the typelist values so that they do not all appear in the
drop-down list (typelist) in the ClaimCenter 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.
You define a static filter at the level of the typelist. You do this through the Studio Typelist editor, 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.)
Notice that the XML 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 is static (fixed) filter.
See also
• For information on the <typefilter> element, see “<typekey>” on page 219
• “Create a static filter” on page 315
Attribute Description
name The name of the filter. ClaimCenter uses this value to determine if a field uses this filter.
desc Description of the context for which to use this typefilter.
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 ClaimCenter to use values set in the various subpanes to modify the typelist
view in the application.
5. 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:
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:
6. (Optional) Regenerate the Data Dictionary and verify that there are no validation errors.
Static filters 315
Configuration Guide 9.0.5
7. Stop and restart the application server to update the data model.
Next steps
See also
• “Typekey fields” on page 310
Then, for each City typecode, you need to set a category, similar to the following:
1. Click on a typecode.
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:
3. Click the typefilter, and then in the selector next to Add , click category.
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 ClaimCenter user interface.
• Reference the typelist in the PCF file in which you want to display the typelist.
See “Typekey fields” on page 310 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:
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. You do this through the Studio Typelist editor, by defining a filter
for a particular typecode. To create this filter, 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:
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 219.
After completing this task, complete “Step 3: Set the ClaimCenter field value in the PCF file” on page 321.
After you declare these two typelists on the ActivityCategory entity, you need to link the typelists to the
appropriate fields on the ClaimCenter Add Activity Pattern screen. To access an entity typelist, you need to use the
entity.Typelist syntax. For example, to access the ActivityCategory typelist on the ActivityPattern entity,
use ActivityPattern.Category with Category being the name of the typelist.
After completing this task, complete “Step 4: Regenerate the Data Dictionary” on page 322.
typekey.TypeList.TC_Typecode
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.
typekey.STATE.TC_CA
You must prefix the code in the object path expressions for typecodes with TC_.
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.
<?xml version="1.0"?>
<typecodemapping>
<namespacelist>
<namespace name="accounting" />
</namespacelist>
<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 ClaimCenter typecode.
namespace The namespace to which ClaimCenter maps the typecode
In the previous example, the PR ClaimCenter code maps to an external application named accounting. You can
create multiple mapping entries for the same ClaimCenter typecode or the same name space. For example, the
following specifies a mapping between multiple ClaimCenter codes and a single external code:
<typelist name="BoatType">
<mapping typecode="AI" namespace="accounting" alias="boat" />
<mapping typecode="HY" namespace="accounting" alias="boat" />
</typelist>
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 ClaimCenter treats as a single aggregate for
purposes of archiving data.
IMPORTANT Guidewire strongly recommends that you contact Customer Support before implementing archiving.
See also
• Application Guide
Related concepts
“Understanding ClaimCenter entity ownership” on page 328
“Ownership relationships in the ClaimCenter archive domain graph” on page 330
“Entities in the archive domain graph” on page 332
“Data model changes that impact archiving” on page 335
“Working with shared entity data” on page 336
“About cycles in the archive domain graph” on page 336
“Validation of the archive domain graph” on page 337
“About archive domain graph errors” on page 339
“About archive graph error messages” on page 343
“About archiving and event messages” on page 345
“Viewing the archive domain graph” on page 345
“Using archive logging” on page 346
Related references
“Overview of the archive domain graph” on page 326
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
ClaimCenter, the root entity type of the archive domain graph is Claim.
Boundary The boundary of the archive domain graph defines which entity types terminate the traversal of owner
relationships from the root and thus prescribe the extent of entities within the graph. In ClaimCenter, the boundary
includes the major entities that relate to the Claim entity type, such as Exposure, Coverage,and Matter, among
others.
See also
• “Delegate data objects” on page 182
• “Entity data objects” on page 185
• “<foreignkey>” on page 211
• “<onetoone>” on page 216
• “Entities in the archive domain graph” on page 332
IMPORTANT Guidewire expressly prohibits bidirectional relationships between ClaimCenter entity types. This
prohibition ensures that ClaimCenter can commit related entity instances in a transactional bundle in a safe order
without exceptions or deadlocks.
See also
• “Validation of the archive domain graph” on page 337
• “About cycles in the archive domain graph” on page 336
See also
• “Defining a reference entity” on page 249
• “Graph validation errors that prevent the server from starting” on page 337
Table cc_purgedrootinfo
Whenever ClaimCenter purges a claim, it deletes the Claim domain graph instance for that claim, including the
ClaimInfo object that is the root of the domain graph instance. However, to track which claims it purged,
ClaimCenter creates a PurgedRootInfo entity at the same time it purges a claim to record the ClaimInfo public ID
of the purged claim. ClaimCenter then stores each PurgedRootInfo instance as a row in table cc_purgedrootinfo.
ClaimCenter does not automatically delete these entities from the table. If you have a high purge volume, Guidewire
recommends that you create a batch process to delete old, unwanted PurgedRootInfo instances from this table.
See also
• System Administration Guide
<?xml version="1.0"?>
<entity xmlns="http://guidewire.com/datamodel" 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 ownership A child entity (B) has a foreign key to its parent entity (A). The foreign key definition includes setting
attribute archivingOwner to target, which indicates that A (the target) owns B (the source). If this
attribute is missing from the foreign key definition, ClaimCenter assumes a value of target, the default.
For example, in the base ClaimCenter configuration, entity Matter has a foreign key relationship with the C
laim entity.
Inverse ownership A child entity (B) has a foreign key to its parent entity (A). However, the foreign key definition sets attribute
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 ClaimCenter configuration, entity Claim has an inverse foreign key relationship
with the ClaimWorkComp entity.
IMPORTANT Guidewire discourages the use of inverse ownership relationships. The ClaimCenter data
model supports inverse ownership relationships for the rare case in which upgrading the database is
unduly cumbersome or time consuming. As a general rule, do not use this type of relationship.
See also
• “<edgeForeignKey>” on page 207
• “<foreignkey>” on page 211
• “Foreign key ownership in the archive domain graph” on page 329
• “Inverse foreign key ownership in the archive domain graph” on page 330
• “Working with shared entity data” on page 336
Foreign key
Ownership flow
To illustrate, in the base ClaimCenter configuration, Matter has a foreign key to Claim. The following Matter
metadata definition shows this relationship.
<entity xmlns="http://guidewire.com/datamodel"
desc="The set of data organized around a single lawsuit or potential lawsuit."
entity="Matter" ... >
...
<foreignkey columnName="ClaimID"
desc="The claim associated with this legal matter."
exportable="false"
fkentity="Claim"
name="Claim"
nullok="false"/>
...
</entity>
As the code does not provide a value for the archivingOwner attribute, ClaimCenter uses its default value, which is
target. Thus, the owner of the Matter entity is the Claim entity.
Understanding ClaimCenter entity ownership 329
Configuration Guide 9.0.5
See also
• “Understanding ClaimCenter entity ownership” on page 328
• “Inverse foreign key ownership in the archive domain graph” on page 330
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 ClaimCenter configuration, Claim and ClaimWorkComp have an ownership relationship,
with a foreign key from Claim to ClaimWorkComp. The following Claim metadata definition shows this relationship.
The archivingOwner attribute of source on the ClaimWorkCompID foreign key indicates an inverse ownership
relationship. Thus, the Claim entity is the owner of the ClaimWorkComp entity.
See also
• “Understanding ClaimCenter entity ownership” on page 328
• “Inverse foreign key ownership in the archive domain graph” on page 330
• “About cycles in the archive domain graph” on page 336
In the diagram:
• A solid arrow line with a single tail indicates that the two graph entities are related in the data model by a foreign
key. The tail of the arrow indicates the entity type on which the data model declares the foreign key. The head of
the arrow indicates the owning entity. For example, the solid arrow between Note and Activity indicates that
Note has a foreign key to the Activity and that an activity can own (have) a note.
• A solid arrow line with a multi-line tail indicates the two graph entities are related in the data model by a foreign
key and an array. The tail of the arrow indicates the entity on which the data model declares the foreign key. The
head of the arrow indicates the entity on which the data model declares the array. For example, the arrow
between Activity and Claim indicates that Activity has a foreign key to Claim and that a claim can own
(have) an array of activities.
• A dashed arrow line indicates the two graph entities are related in the data model by a single reverse foreign key.
The tail of the arrow indicates the entity on which the data model declares the foreign key. But, in this case, the
entity at the tail of the arrow is also the owning entity. For example, the arrow between Claim and Policy
indicates that Claim has a foreign key to Policy and that a claim can own (have) a policy. Guidewire indicates
this type of relationship by setting the archivingOwner="source" in the foreign key metadata definition.
ClaimInfo
Domain graph
Exposure
Note Activity
Claim
archivingOwner=source
ClaimContact
Policy
Overlap tables
archivingOwner=source
Contact ContactAddress
Legend
Reference A B B has an A
data
A B B has an array of A
Catastrophe A B A has a B
Individual rows in an overlap table can exist only as part of the archive domain graph or as reference data, but
not both.
• The Claim entity has a foreign key link to the Catastrophe entity. However, ClaimCenter does not archive
catastrophe data as the Catastrophe entity is reference data, which is not part of the archive domain graph nor
overlap data.
• The Claim entity has an indirect reference to the Contact entity through the ClaimContact entity. ClaimCenter
archives instances of the Contact entities linked to the archived Claim entity as these entity instances are also
part of the archive domain graph.
• Entity types that do not implement either the Extractable or OverlapTable delegate are reference data.
ClaimCenter does not archive reference data.
See also
• “<implementsEntity>” on page 213
• “Delegate data objects” on page 182
• “The archive domain graph and reference data” on page 327
WARNING Do not change or remove the archiving delegates on Guidewire entities in the base configuration.
Otherwise, it is possible for the ClaimCenter 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 data objects” on page 182
• “The archive domain graph and reference data” on page 327
• “Ownership relationships in the ClaimCenter archive domain graph” on page 330
<entity xmlns="http://guidewire.com/datamodel"
consistentchildren="false"
desc="Claim Information"
entity="ClaimInfo"
exportable="true"
extendable="true"
lockable="false"
platform="false"
table="claiminfo"
type="retireable">
...
<implementsEntity name="RootInfo"/>
...
</entity>
The ClaimInfo metadata defines minimal, summary information about an archived claim. For example, the entity
contains the claim number and loss location. ClaimCenter uses this information during claim search to find archived
claims.
IMPORTANT Because ClaimCenter does not archive the ClaimInfo table, the table grows regardless of archiving.
Therefore, Guidewire recommends against extending the ClaimInfo entity to store large amounts of data, such as
BLOB fields.
<entity xmlns="http://guidewire.com/datamodel"
consistentchildren="true"
desc="Insurance claim"
entity="Claim"
exportable="true"
lockable="true"
table="claim"
type="retireable">
...
<implementsEntity name="Extractable"/>
...
</entity>
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.
<entity xmlns="http://guidewire.com/datamodel"
consistentchildren="true"
desc="Insurance claim"
entity="Claim"
exportable="true"
lockable="true"
table="claim"
type="retireable">
...
<edgeForeignKey desc="Workers' Comp only. Details about the claimant's employment."
edgeTableName="claimempdata"
extractable="true"
fkentity="EmploymentData"
loadable="true"
name="EmploymentData"
nullok="true"/>
...
</entity>
See also
• “<edgeForeignKey>” on page 207
See also
• “The archive domain graph and reference data” on page 327
<internalExtension xmlns="http://guidewire.com/datamodel"
entityName="Address">
...
<implementsEntity name="Extractable"/>
<implementsEntity name="OverlapTable"/>
...
</internalExtension>
See also
• “<edgeForeignKey>” on page 207
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.
See also
• “About archive domain graph errors” on page 339
• “Resolve archive graph errors” on page 339
• “Resolve archive graph warnings” on page 340
• “Resolving issues with custom archive entities” on page 341
• “About archive graph error messages” on page 343
Test Description
Domain graph not Verifies that all tables in the archive domain graph are reachable through the root entities.
partitioned
Edge tables in domain Verifies that if edgeTable is set on an entity in the archive domain graph, it must have all of the
graph have required following:
foreign keys • An owned foreign key back to one of its parents
• An unowned foreign key to that same parent.
No cycles in domain Looks for circular references in the archive domain graph. Circular references in the graph cause
graph issues for the archive process.
Test Description
The archive domain graph cannot have any cycle in its is owned by relationships. Thus, the following
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 archive
domain graph” on page 345 for information on how to view the graph in a graphical format.
Domain graph entities Ensures that all entities inside the archive domain graph implement the Extractable delegate.
implement Extractabl ClaimCenter uses the following column on Extractable during the archive process:
e • ArchivePartition
This test also verifies that no entities outside the archive domain graph implement the Extractable
delegate.
Overlap tables Verifies that all overlap tables implement the OverlapTable delegate. An overlap table contains
implement OverlapTab rows that can exist either in the archive domain graph or as part of reference data, but not both.
le 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 to
keyable reference the entity by ID.
Reference entities Verifies that all reference entities in the archive domain graph are retireable. See “The archive
retireable 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 that are outside of the archive domain graph.
graph are outside the ClaimCenter has several built-in exceptions to the rule that foreign keys from entities outside the
domain graph archive domain graph not reference entities inside the archive domain graph. For these entities, this
test verifies that the outside entity is indeed outside the archive 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 ClaimCenter server.
See also
• “Resolve archive graph errors” on page 339
• “Resolving issues with custom archive entities” on page 341
Graph validation warnings that do not prevent the server from starting
The following list describes validation tests that ClaimCenter performs on the archive domain graph during startup.
Test Description
Archive domain graph entities All foreign keys from entities in the archive domain graph must reference other entities in
refer only to administrative data the domain graph only. Otherwise, foreign key violations can occur as ClaimCenter
and domain entities traverses the domain graph during the archiving processes.
Nothing outside the archive There must not be foreign keys from entities outside the archive domain graph to entities
domain graph points to the inside the archive domain graph.
graph
Null links cannot make a node ClaimCenter constructs the archive domain graph by looking at foreign keys. If enough links
unreachable are 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 ClaimCenter server from starting. ClaimCenter 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.
See also
• “DomainGraphKnownUnreachableTables” on page 46
• “Resolve archive graph warnings” on page 340
• “Resolving issues with custom archive entities” on page 341
• System Administration Guide
Procedure
1. Stop the application server.
2. Ensure that archive logging is set to logging level DEBUG in logging.properties. If necessary, enable
archive logging or add this functionality if it is missing.
3. Disable archiving by setting configuration parameter ArchiveEnabled to false in file config.xml.
4. Start the server in Development mode.
By starting the server in Development mode and disabling archiving, it is possible to start the application
server even if there are archive domain graph errors. ClaimCenter treats all issues with the archive domain
graph as non-fatal warnings. It writes these warnings to the application console log, or, if redirected, to the
server log.
Result
It is now possible to start the application server with a fully valid archive domain graph.
Next steps
See also
• “Resolve archive graph warnings” on page 340
• “Resolving issues with custom archive entities” on page 341
• “Viewing the archive domain graph” on page 345
• System Administration Guide
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 ClaimCenter 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
ClaimCenter.
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.
Next steps
See also
• “Resolve archive graph errors” on page 339
• “Resolving issues with custom archive entities” on page 341
• System Administration Guide
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
• “Validation of the archive domain graph” on page 337
• “Resolve archive graph errors” on page 339
• “Resolve archive graph warnings” on page 340
• “Defining a cross-domain tag” on page 342
• “About archive graph error messages” on page 343
• “Viewing the archive domain graph” on page 345
• “Using archive logging” on page 346
• Integration Guide
<?xml version="1.0"?>
<extension xmlns="http://guidewire.com/datamodel" entityName="TestAccount">
<column name="ArchivedChargePublicID" nullok="true" type="publicid"/>
<foreignkey archivingOwner="none" fkentity="Charge" name="Charge" nullok="true">
<tag name="CrossDomainPublicID" value="ArchivedChargePublicID"/>
</foreignkey>
</extension>
See also
• “<tag>” on page 218
• “Understanding ClaimCenter entity ownership” on page 328
To correct this:
1. To include the entity in Claim graph, please change them to implement Extractable.
OR
2. To avoid including it in Claim graph, foreignkey must point out of the Claim
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.
See also
• “Archive entities and the Extractable delegate” on page 333
• “Understanding ClaimCenter entity ownership” on page 328
• “Defining a cross-domain tag” on page 342
To resolve this issue, remove ImplementsEntity="Extractable" from the metadata definitions of the entity types
that the error message lists.
ERROR An exception was thrown while starting a component. Setting runlevel to SHUTDOWN
[Archiving graph validation failed. Error details:
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: entity.CustomEntity2.CustomOverlapTable.
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.
See also
• “Archive entities and the OverlapTable delegate” on page 334
Failed to archive claim: 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 Claim 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 342.
See also
• “The archive domain graph and reference data” on page 327
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 342
• Rules Guide
Procedure
1. Log into ClaimCenter 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.
dot.exe -Tpdf -opdf-file.pdf 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 ClaimCenter 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.
dot.exe -Tpng -opng-file.png 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.
This topic covers how to work with PCF (Page Configuration Format) files in Guidewire Studio.
Next steps
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
possible modes. You can use the drop-down to select a different modal file. If you do so, then Studio updates the
screen to reflect your change.
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:
• ExposureDetailDV.Baggage
• ExposureDetailDV.Bodilyinjurydamage
• ExposureDetailDV.Content
• ExposureDetailDV.Employerliability
• ...
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 selectedAddress.CountryCode 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.
Procedure
1. Select the file that you intend to use as the template. For this example, select ExposureDetailDV.Baggage.
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
ExposureDetailDV.BusinessPropertydamage
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.
PersonVendor|Attorney|Doctor
Procedure
1. Select the include file.
2. Right-click and select Change mode....
3. Enter the individual modes separated by a pipe symbol (|) in the Change Mode dialog.
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.
If the child list represents a single child type, Studio adds a new child element. Studio selects the newly added child
automatically. 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.
Additional Description
tabs
Axes If an element can have DomainAxis and RangeAxis children, Studio displays the Axes properties tab. This tab
contains a child list of the DomainAxis and RangeAxis children for the selected element. If you select a RangeAx
is, 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 Points If an element can have LocationEntryPoint children, Studio displays the Entry Points properties tab. This tab
contains 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 Options If an element can have ToolbarFilterOption and ToolbarFilterOptionGroup children, Studio displays the
Filter Options properties tab. This tab contains a child list of the ToolbarFilterOption and ToolbarFilterOptio
nGroup children for the selected element.
Next If an element can have NextCondition children, Studio displays the Next Conditions properties tab. This tab
Conditions contains 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
checkbox for Enable client reflection, which indicates whether that element has a Reflect child. If you enable
client reflection, the Reflection tab also contains a properties list for the Reflect element and a child list for its R
eflectCondition children.
Required If an elements can have Require children, Studio displays the Required Variables properties tab. This tab contains
Variables a 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 Flags If an element can have ToolbarFlag children, Studio displays the Toolbar Flags properties tab. This tab contains a
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.
However:
• If is possible to select a new element type that does not allow one or more attributes supported by the selected
(existing) element. In this case, Studio displays a message that indicates which attributes it plans to discard.
• If it is possible to select an element type that can not contain one or more children of the selected widget. In this
case, Studio displays a message that indicates which children it plans to discard.
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 ClaimCenter from rendering the
widget. In this case, however, the XML file retains the widget. It still exists server-side at run time, although
ClaimCenter 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),
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.
Linking widgets
A common feature in PCF pages is a ListView element controlled by a RowEditor iterator. ClaimCenter 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.
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
Procedure
1. Select a widget, for example a CheckedValuesToolbarButton widget.
2. Do one of the following:
• Select Link widgets from the Page Config menu.
• Right-click and select Link widgets from the context menu.
• Press Ctrl+L.
Studio changes the look of the mouse cursor to cross-hairs. Studio also changes the color of the target widget
to light green.
3. Click the widget to which you want to link. Studio links the two widgets.
This topic provides an introduction to the concepts and files involved in configuring the web pages of the
ClaimCenter user interface.
Using Ctrl+Shift+W, you can discover that these elements are defined in the PCF file TabBar.pcf. In Guidewire
Studio, you can open TabBar.pcf 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 ClaimCenter 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 ClaimCenter 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
ClaimCenter.
Worksheet A page that can be shown in the workspace, the bottom pane of the web interface. The main advantage of
worksheets 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,
ClaimCenter 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
group of related pages. ClaimCenter can automatically display the appropriate menus and other interface elements
that allow users to navigate among these pages.
Widgets
A widget is an element that ClaimCenter can render into HTML. ClaimCenter 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 ClaimCenter 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
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 ClaimCenter 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 ClaimCenter 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:
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 ClaimCenter 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
After you see the one you want, click on it and ClaimCenter 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
To override specific CSS classes, make edits to ClaimCenter/modules/configuration/webresources/themes/
theme-9/resources/theme_ext.css. Changes in this file override other CSS properties in your application.
Procedure
1. Open ClaimCenter/ThemeApp/packages/theme-9/sass/var/Component.scss in a text editor. This is
where all of the ClaimCenter colors are defined.
2. You can modify the definition to be any other hexadecimal color, or to be relative to another.
For example, $base-light-color takes the $base-color and lightens it appropriately across the application.
3. After making changes, run gwb updateTheme from the command line. This incorporates your changes into the
CSS generated by the SASS Theme.
Advanced theming
ClaimCenter 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 ClaimCenter/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
ClaimCenter 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 371 – A series of widgets laid out in one or more columns.
• “List view panel” on page 376 – 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 ClaimCenter. 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 378.
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 377
• “Inline” on page 378
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:
List view
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 380.
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.
Consider the following example, in which a Claim variable represents a claim:
To iterate over the array of activities in the claim, this list view creates a row iterator whose value attribute is
Claim.Activities. 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 field An array field on an entity type is identified in the Data Dictionary as an array key. For example, the Officials
field on a Claim is an array key. Thus, you can define a list view based on Claim.Officials. 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 methods that return array data for use in a list view. The method must return either a Gosu array or a Java
list (java.util.list).
Query A query processor field on an entity type is identified in the Data Dictionary as a derived property returning gw.a
processor pi.database.IQueryBeanResult. It represents an internally-defined query, and usually provides a more
field convenient and efficient way to retrieve data. For example, the Claim.ViewableNotes 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 Claim.Notes array field, which loads both viewable and non-viewable notes and filtering the
non-viewable ones out later.
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
instances of an entity type. For example, the Activities page of the Desktop uses a list view based on the finder
method Activity.finder.getActivityDesktopViewsAssignedToCurrentUser.
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, ClaimCenter 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 Desktop.go(). 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
ClaimCenter 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.
Navigation 389
Configuration Guide 9.0.5
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.
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 Desktop.go().
Tabs 391
Configuration Guide 9.0.5
This creates the menu items that appear on the Search tab:
ClaimCenter 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 ClaimCenter functionality in Gosu classes and modifying the ClaimCenter interface through page configuration
files.
You can customize only search functionality associated with the Search tab (and documents). You cannot customize
specialized searches for users and groups, for example.
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.
Search overview
ClaimCenter provides two types of search:
• Database search – Searches the relational database for claims, contacts, activities, checks, recoveries, and bulk
invoices by using the Structured Query Language (SQL). You access these searches from the Search tab.
ClaimCenter also includes database search from screens besides those accessed through the Search tab. For
example, you can do a database search for policies from the New Claim screen.
• Free-text search – Searches an external full-text database for claims by claim contact using the APIs of an
external full-text search engine. You access free-text search from the Search→Claims→Search by Contact screen.
Database search is fully enabled by default. Users can choose to include archived claims with each database search
request.
Free-text search is available as an option that you must enable and configure. Free-text search is available only for
searching for claims by claim contact. Free-text search results never include archived claims.
IMPORTANT The ClaimCenter base configuration does not allow free-text search of entity types other than claim
contacts. Guidewire will support customers in their development of additional search types.
Relational database
ClaimCenter application
Claim updates
Full-text database
Free-text search involves two sets of data flows in which a user selects and reviews claims as well as updates them.
In the claim review data flows, the user searches, selects, and reviews claims with the ClaimCenter user interface.
Searching claims entails sending queries to and receiving claim results from a full-text search engine. Selecting and
reviewing claims entails requesting and receiving claims from a relational database:
2. ClaimCenter
1. User searches ClaimCenter Full-text search
application sends query
claims with basic or application engine
to full-text search engine.
free-text search.
3. Full-text search engine
returns query results to
ClaimCenter application.
4. User selects and
reviews claim from
query results. 5. Relational database
sends selected claim to
ClaimCenter application.
Relational
database
In the claim update data flow, the user updates claims or claim-associated contact information with the ClaimCenter
user interface. Updating claims and claim-associated contact information 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
1. User updates claim or ClaimCenter 2. ClaimCenter application
contact information of a application sends update to relational
person associated with a database.
claim.
3. ClaimCenter application
sends index document
with updates to full-text
search engine.
Full-text search
engine
If you enable free-text search, the Search→Claims menu displays three options:
• Simple Search, Advanced Search – Displays fields on which to search for claims using database search.
• Search by Contact – Displays fields on which to search for claims using claim contacts and free-text search.
If you disable free-text search, the Search→Claims menu displays only the Simple and Advanced options.
Reasons that users choose a particular search screen include:
• Users want to search for claims by claim contact with commonly used criteria and receive results quickly, which
the Search by Contact screen provides.
• Users want to search claims with highly targeted criteria, which requires the Simple Search screen.
• Users want to search claims with partial names, phonetic names, or sounds-like names, which the Search by
Contact screen provides.
• Users want to search archived claims, which requires the Advanced Search screen.
An administrator hides the Search by Contact search screen while the free-text batch load command runs, but users
still can search claims with the Simple and Advanced options.
Relational database
Simple and advanced
claim search
(database search)
ClaimCenter application
Claim updates
See also
• “Database search configuration” on page 396
• “Free-text search configuration” on page 411
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.
For each search, the ClaimCenter user interface requires specific fields but others are optional. You can add, modify
or remove optional fields to the PCF file that provides the user interface. You cannot add required fields. Also, do
not modify or remove required fields specified in the ClaimCenter base search configuration.
The PCF files that define a particular search page reflect this division. You can find the search pages in Studio under
Page Configuration→pcf→search. Each search detail view references two subviews, each contained within their own
PCF. For example, ActivitySearchDV defines the detail view and includes the following two subviews:
• ActivitySearchRequiredInputSet
• ActivitySearchOptionalInputSet
During a search, the Guidewire application uses a search criteria object. Every field on the Search page maps to an
attribute on the relevant search criteria entity. For example, in the Activity search screen, the value that you set in the
Assigned To User field maps to ActivitySearchCriteria.AssignedToUser in the
ActivitySearchRequiredInputSet PCF file.
Note: Search criteria entities are virtual entities. A virtual entity has no underlying table in the ClaimCenter
database, and does not persist beyond the session in which you use it.
In most cases, each attribute on the search criteria entity maps to one attribute on the key entity. For drop-down
widgets, however, the search criteria object contains an attribute that points to an array, which can map to multiple
attributes on the key entity. The search-config.xml file maps search criteria to the target entities.
The fields in a search form correspond to entity attributes in the data model. You can customize the search process to
search by an attribute on the key entity or any of its related objects. For example, to use the Activity search screen
again, the value that you set in the Assigned To User field maps to ActivitySearchCriteria.AssignedToUser. The
search-config.xml file maps this attribute to Activity.AssignedUser.
</CriteriaDef>
You can map a single search criteria entity to more than one target entity.
For example, the ClaimSearchCriteria object has a <CriteriaDef> element associated with all of the following
entities:
• Claim
• ClaimInfo
• ClaimRpt
The ClaimRpt table contains denormalized claim financials information. By mapping to this table, ClaimCenter
increases search performance for financial related claim searches. An example of this type of search is searching for
a claim with a specific open reserve amount. By mapping to ClaimRpt, ClaimCenter avoids calculating financial
values within the search query itself.
Some search requirements are more complex than a simple one-to-one mapping. For example, the ClaimCenter
Search Claims page contains a Search For Date field. Properties such as Search for Date complicate search configuration
because a single column in the search criteria can match against one of several columns in the target. To handle
these cases, you use the <CriterionChoice> element, a subelement of the <CriteriaDef> element. A
<CriterionChoice> parameter matches an attribute on the search criteria entity against any one of a number of
target attributes.
Do not add new <CriteriaDef> elements into search-config.xml. 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 ClaimCenter installation.
WARNING Guidewire strongly recommends you do not remove <CriteriaDef> elements that exist in the base
configuration.
See also
• “The <CriteriaDef> element” on page 398
• “Free-text search configuration” on page 411
• Guidewire Contact Management Guide
The following table lists each search criteria object specified in search-config.xml and its corresponding entity
objects in ClaimCenter.
Address Address
BulkInvoiceSearchCriteria BulkInvoice
CCNameCriteria ClaimContact
Company
Contact
ContactInfo
Person
ClaimInfoCriteria ClaimInfo
ClaimSearchCriteria Claim
ClaimInfo
ClaimRpt
DocumentSearchCriteria Document
PaymentSearchCriteria Check
CheckRpt
RecoverySearchCriteria Recovery
UserSearchCriteria Attribute
AttributeUser
AuthorityLimitProfile
User
<Criterion property="attributename"
targetProperty="attributename"
forceEqMatchType="booleanproperty"
matchType="type"/>
property • The name attribute on the criteria entity. ClaimCenter uses this value to get the user's
search term from the criteria entity.
matchType • This attribute is dependent on the data type of the targetProperty. See the following
table for possible values.
forceEqMatchType The name of a Boolean property on the criteria entity:
• If this attribute evaluates to true, the Criterion uses an eq (equality) match.
• If this attribute evaluates to false, the Criterion uses the matchType that the Criter
ion specifies to perform the match.
For example:
<Criterion property="StringProperty"
forceEqMatchType="FlagProperty"
matchType="startsWith"/>
This code uses a startsWith match for StringProperty unless the FlagProperty on the
criteria entity is true, in which case, the match uses an eq match type.
targetProperty The name attribute on the entity on which to search.
IMPORTANT Do not use a virtual property on the entity as the search field.
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.
The init attribute on the <DateCriterionChoice> element specifies how to restrict the date field. The user can
restrict the date range either through a typelist of preset ranges, such as the next 30 days, or through a specific start
and end date. The init attribute sets the following values.
This <CriterionChoice> definition sets the available <Option> elements on which to search. In this case:
• Loss date
• Reported date
• Close date
• Create time
The following limitations apply:
• You cannot specify a match type for criterion choice entities because their matching algorithm is built into the
entity.
• Guidewire initializes <DateCriterionChoice> properties for the major searches in the base configuration
search-config.xml file. This configuration limits searches by date to improve performance on large databases,
in which searching a very large number of claims or activities (or both) can be resource intensive. Typically,
users do not expect their searches to be date limited. However, these limitations are necessary for acceptable
performance.
The use of the ArchiveDateCriterionChoice value has the same requirements and limitations as the
DateCriterionChoice value.
<CriterionChoice property="FinancialCriterion">
<Option label="Java.Criterion.Option.Payment.GrossAmount" targetProperty="GrossAmount"/>
</CriterionChoice>
label • Display key that indicates the choice. ClaimCenter uses this text to display the option to the
user in a select control.
targetProperty Target column against which ClaimCenter matches the user-input value. Do not use a virtual
property on an entity as the target column.
WARNING The targetProperty attribute is optional, but Guidewire requires you to specify
this attribute if you add a new <Option> element. Omitting this attribute on a new option can
cause ClaimCenter to operate incorrectly.
<CriteriaDef>
<ArrayCriterion property="someName" targetProperty="someTargetProperty"
arrayMemberProperty="someArrayMember"/>
...
</CriteriaDef>
property • The name attribute given for the column (field) on the search criteria entity. The
search uses this value to fetch the user-entered input value on the criteria entity.
targetProperty • The name attribute of the array on the target entity.
arrayMemberProperty • The name attribute of a column (field) in the array member type. For example, if targ
etProperty refers to an array of entity type X instances, then arrayMemberProperty
is a column (field) on instances of entity type X.
See also
• “Add an optional array search field” on page 407
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 ClaimCenter search screens.
Procedure
1. Add an extension field named PercentComplete to the Claim entity:
a. In the Studio Project window, navigate to configuration→config→Extensions→Entity.
b. Double-click Claim.etx to open the entity extension if it exists, or right-click Entity to create a new entity
extension of the Claim entity.
c. In the Field drop-down, select column. If column is selected already, click Add .
A new row appears at the bottom of the list on the left, with column as the Element value.
d. In the list on the right, set the following attribute values.
name PercentComplete
type percentagedec
null ok true
name PercentComplete
type percentagedec
null ok true
3. Add a <Criterion> element to the search-config.xml file for the extension field PercentComplete.
a. In the Project window, navigate to configuration→config→search, and then double-click search-
config.xml to open the file.
b. In the XML editor, locate the <CriteriaDef> element for the ClaimSearchCriteria with Claim as the
target entity, and then add a <Criterion> for the PercentComplete field.
Guidewire recommends that appropriate indexes be in place whenever you change search criteria. For
example, if PercentComplete is the most restrictive equality condition in your search implementation,
consider adding an index with this PercentComplete as the leading key column.
c. Within file search-config.xml, increment the file version number before you save the file.
Guidewire recommends that you increment the version number whenever you modify the search-
config.xml file, although doing so is not a technical requirement.
4. Add a display key for the PercentComplete fields:
a. In the Project window, navigate to configuration→config→Localizations.
b. Double-click display_en_US.properties to open the file.
c. Find the group of display keys that begin with JSP.ClaimSearch.Claims, and then add the following
line.
The Display Keys editor displays the new line in gray lettering to indicate that the display key is an
unused property.
d. Repeat the preceding steps for each additional language that you support in your installation of
ClaimCenter. For _en_US, substitute the Java locale code of each additional language, and provide an
appropriate localization of “Percent complete”.
5. Add an editable field labeled Percent Complete to the configuration of the claim search page:
a. In the Project window, navigate to configuration→config→Page Configuration→pcf→search→claims, and then
double-click ClaimSearchOptionalInputSet.pcf to open the file.
b. From the Toolbox tab, search for Basic Inputs. Then, drag the generic Input widget type onto the page
canvas.
For example, place the new Input widget in the Optional parameters section, directly under the Claim Status
field.
c. In the Properties tab at the bottom of the screen, set the following values.
editable true
id Completion
label displaykey.JSP.ClaimSearch.Claims.PercentComplete
required false
value ClaimSearchCriteria.PercentComplete
gwb genJavaApi
gwb genDataDictionary
Result
The claim search page contains your new field as a searchable option. Separately, you must provide a way to assign
the percentage complete on claims. For example, you might provide a new field on one of the claim screens.
Next steps
See also
• Installation Guide
Procedure
1. Create an entity type named ClaimCode to use as an array field on the Claim entity type:
a. In the Project window, navigate to configuration→config→Extensions→Entity.
b. Right-click Entity, and then select New→Entity.
c. In the Entity dialog, enter the following information.
Table claimcode
d. Click OK.
The new file ClaimCode.eti opens.
e. Add the following elements, with the specified attribute values.
type varchar
value 30
fkentity Claim
nullok false
position 1
position 2
position 1
position 2
c. In the Field drop-down list, select array. If array is selected already, click Add .
A new row appears at the bottom of the list on the left, with array as the Element value.
d. In the list on the right, set the following attribute values.
name ClaimCodes
arrayentity ClaimCode
owner true
name ClaimCode
type varchar
e. In the Field drop-down, select columnParam. If columnParam is selected already, click Add .
A new row appears at the bottom of the list on the left, with columnParam as the Element value.
f. In the list on the right, set the following attribute values.
name size
value 30
4. Add an <ArrayCriterion> element to the search-config.xml file for the extension field ClaimCode.
a. In the Project window, navigate to configuration→config→search, and then double-click search-
config.xml to open the file.
b. In the XML editor, locate the <CriteriaDef> element for the ClaimSearchCriteria with Claim as the
target entity, and then add a <ArrayCriterion> element for the ClaimCode field.
c. Within file search-config.xml, increment the file version number before you save the file.
Guidewire recommends that you increment the version number whenever you modify the search-
config.xml file, although doing so is not a technical requirement.
5. Add a display key for the ClaimCode field label:
Customizing a database search 409
Configuration Guide 9.0.5
The editor displays the new line in gray lettering to indicate that the display key is an unused property.
d. Repeat the preceding steps for each additional language that you support in your installation of
ClaimCenter. For _en_US, substitute the Java locale code of each additional language, and provide an
appropriate localization of “Claim Code”.
6. Add an editable field labeled Claim Code to the configuration of the claim search page:
a. In the Project window, navigate to configuration→config→Page Configuration→pcf→search→claims, and then
double-click ClaimSearchOptionalInputSet.pcf to open the file.
b. From the Toolbox tab, search for Basic Inputs, and then drag the generic Input widget type onto the page
canvas.
For example, place the new Input widget in the Optional parameters section, directly under the Claim Status
field.
c. In the Properties tab at the bottom of the screen, set the following values.
editable true
id ClaimCode
label displaykey.JSP.ClaimSearch.Claims.ClaimCode
required false
value ClaimSearchCriteria.ClaimCode
gwb genJavaApi
gwb genDataDictionary
Result
The search page now contains a field on which you can search by claim codes. Separately, you must provide a way
to assign codes to a claim. For example, in ClaimCenter, you can provide a new field on one of the claim screens.
Next steps
See also
• Installation Guide
Guidewire ClaimCenter
database engine
Free-text search
application server
ISolrSearchPlugin
Guidewire Solr Extension
ISolrMessageTransportPlugin
Note: Guidewire supports running the separate application server instances for ClaimCenter and the Guidewire
Solr Extension on the same hosts in production.
database server
database engine
application server
Guidewire ClaimCenter
Free-text search
ISolrMessageTransportPlugin
Legend
Running software
Configuration files
Host computer
With embedded operation, the Solr Data Import batch process on the Batch Process page of the Internal Tools tab is
available as the alternative to the free-text batch load command.
embedded operation. After you complete the setup of free-text search, you enable free-text search in ClaimCenter
with:
• SolrDestFilter rules in the EventFired rule set
• The free-text search plugins ISolrMessageTransportPlugin and ISolrSearchPlugin
• The free-text message destination SolrMessageTransport.ClaimContact.Name
None of the preceding free-text resources in ClaimCenter operate unless you set the turnkey configuration parameter
FreeTextSearchEnabled to true. After you make this change, use the FreeTextSearchEnabled parameter to
toggle the free-text search feature in ClaimCenter off and on temporarily.
Procedure
1. Start ClaimCenter 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 EventFired.grs in the Rules editor, and then ensure that the SolrDestFilter
rules are enabled.
3. Enable free-text search:
a. In the Project window, navigate to configuration→config.
b. Double-click config.xml to open it in the XML editor, and then set FreeTextSearchEnabled to true.
4. Start the ClaimCenter 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.
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.
Next steps
See also
• Installation Guide
• Integration 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 cc-gwsolr.zip 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 cc-
gwsolr.zip file.
See also
• Installation Guide
The servername attribute specifies a <solrserver> element defined elsewhere in the solrserver-config.xml
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 ClaimCenter.
• http – The Guidewire Solr Extension operates externally from ClaimCenter, as a single server.
• cloud – The Guidewire Solr Extension operates externally from ClaimCenter, 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, ClaimCenter runs with the embedded server by default. ClaimCenter does so for two
reasons. The first reason is because ClaimCenter 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 ClaimCenter with the external server hosted locally instead, start ClaimCenter with the Java VM
environment variable -Dgw.cc.env=local. In this case, ClaimCenter looks for the <document> element with the
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.
ClaimCenter supports the embedded type only in development environments. ClaimCenter 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 lets you bind document types, such as claim contacts, to a server that has cores for them. A
<document> element may reference a <solrserver> element of type embedded only if you run the ClaimCenter
application in development mode. Otherwise, ClaimCenter 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 cc-gwsolr.zip file as solrroot. In a typical development environment, the home
directory is on the same host as the one that hosts your ClaimCenter application. Free-text search creates the
directory specified by solrroot during server startup if the directory does not exist and extracts the files from cc-
gwsolr.zip 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.
For embedded operation on Tomcat, you must include the gwsolrzip parameter to specify the absolute path to the
cc-gwsolr.zip file in your ClaimCenter home directory.
See also
• “Configuring the Guidewire Solr Extension for provisioning” on page 421
The name attribute of the <solrserver> element lets you bind a document type, such as claim contact, 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 ClaimCenter application. If you run the Guidewire Solr Extension on the same machine that runs ClaimCenter,
specify localhost for the host parameter. Otherwise, specify the host name for the remote host.
Configuring the Guidewire Solr Extension for embedded or external operation 419
Configuration Guide 9.0.5
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.
Specify timeout intervals in milliseconds. The connectiontimeout parameter specifies how long ClaimCenter
waits for the Guidewire Solr Extension to respond to a connection request. The readtimeout parameter specifies
how long ClaimCenter 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.
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 422
Setting the logging level to WARN or ERROR requires modifying the logging.properties file. You can access this
file at the following location in Guidewire Studio:
configuration→config →logging
In the logging.properties file, set log4j.category.org.apache.solr either to WARN or ERROR. Ensure that one
of the following lines is present in the file:
log4j.category.org.apache.solr=WARN
log4j.category.org.apache.solr=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:
•
•
•
If you set the provision parameter to true, free-text search deploys the files from ClaimCenter/gwsolr/cc-
gwsolr.zip to the solrroot directory every time you start the ClaimCenter 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 ClaimCenter
application.
See also
• “Configuring the Guidewire Solr Extension for embedded or external operation” on page 418
Procedure
1. Start ClaimCenter Studio.
2. In the Project window, navigate to configuration→config→solr.
3. Double-click solrserver-config.xml 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:
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 ClaimCenter, use cc 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 cc.
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 ClaimCenter Studio.
2. In the Project window, navigate to configuration→config→solr.
3. Double-click solrserver-config.xml 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"
Next steps
You must now perform the following tasks:
• “Install ZooKeeper” on page 423
• “Configuring zoo.cfg ” on page 424
Install ZooKeeper
Procedure
1. Download version 3.4.6 from the Apache ZooKeeper web site.
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
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 zoo.cfg ” on page 424
Configuring zoo.cfg
In zoo.cfg, you configure a single ZooKeeper member server. Each ZooKeeper member within an ensemble has its
own copy of zoo.cfg. The zoo.cfg file configures a ZooKeeper server with its client port. ClaimCenter 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 zoo.cfg 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 ClaimCenter and Guidewire Solr
Extension servers. The value for clientPort must match the port specified for the server in the zkhosts
parameter of solrserver-config.xml. The port defaults to 2181 in both zoo.cfg and solrserver-
config.xml.
• 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 zoo.cfg 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 ClaimCenter 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 zoo.cfg 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.
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 zoo.cfg.
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
zoo.cfg.
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:
https://archive.apache.org/dist/lucene/solr/ref-guide/apache-solr-ref-guide-4.10.pdf
https://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html
CC 1 ZK 1 TCP:
2888,
TCP: 2181 3888
CC 1 CC 1 ZK 2 ZK 3
Solr 2 Solr 3
authenticating the ClaimCenter 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 ClaimCenter 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 ClaimCenter 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.
ClaimCenter inserts a host property in solr.xml, in the following format, whenever you run the gwb packageSolr
command:
<str name="host">${serverHost:127.0.0.1}</str>
Note: If you modify solr.xml manually for any reason, ClaimCenter no longer inserts a host property when you
run the gwb packageSolr command.
The base configuration of ClaimCenter does not include solr.xml. To create a solr.xml file to edit in Studio or to
retain changes that you make to solr.xml in GWSOLR_HOME/cc/solr, copy the file in GWSOLR_HOME/cc/solr. In
ClaimCenter Studio, navigate in the Project window to configuration→config→solr, and then, from the menu, click
Edit→Paste.
ClaimCenter uses host number 127.0.0.1 by default for locally hosted instances of the Guidewire Solr Extension.
For remotely hosted instances, override the value in the JVM where ClaimCenter runs using the serverHost system
property. For example, if your application server is Tomcat, create or edit the shell script setenv.sh or, on
Windows, the batch file setenv.bat in the directory Tomcat_Home/bin. Then, add the following line:
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 solr.xml. Change the port definition in solr.xml 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 cc-solr.zip file to deploy to the Guidewire Solr home directory.
Instead, ClaimCenter provides Guidewire versions of the ZooKeeper command line interface, shell script
(gwzkcli.sh) and batch file (gwzkcli.bat). These command files are located in the following deployment
directory:
/opt/gwsolr/cc/scripts
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
• On Windows
If you started an instance of the Guidewire Solr Extension before running the preceding command, run the following
commands to reset that instance:
-Djavax.net.ssl.trustStore=pathToTrustStore -Djavax.net.ssl.trustStorePassword=password
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.
Configuring the Guidewire Solr Extension for secure transport (HTTPS) 427
Configuration Guide 9.0.5
opt/gwsolr/cc/solr/claimcontact_active/conf
Generally, you configure the free-text batch load command when you first install and set up free-text search.
Afterward, you need to modify your initial configuration only if resources in your computing environment change,
such as the connection to your database.
See also
• Installation Guide
Note: ClaimSearchCriteria is used to map input fields on the search screen, and FreeTextClaimSearchResults
is used to map the results received from Solr.
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.
CCSolrSearchPlugin.gs The implementation class for the free-text plugin ISolrSearchPlugin. This plugin
sends search criteria to the Guidewire Solr Extension and receives the search results.
ClaimCenter/modules/gsrc/gw/solr/CCSolrSearchPlugin.gs
The following table lists the configuration files for Guidewire Solr Extension.
The following table lists the configuration files for the free-text batch load command.
/opt/gwsolr/cc/solr/claimcontact_active/conf/batchload.sh
IMPORTANT The ClaimCenter base configuration does not support free-text search of entity types other than claim
contacts. 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.
/opt/gwsolr/cc/solr/claimcontact_active/conf/schema.xml
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.
ClaimCenter/modules/configuration/config/search/claimcontact-search-config.xml
Access the file in the Project window in Studio by navigating to configuration→config→search claimcontact-
search-config.xml. ClaimCenter defines the format of this file.
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 claimcontact-search-config.xml, 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="root.ClaimContactAddress.PostalCode"/>
</IndexField>
The definition specifies that values of postalCode fields in the index documents sent to the full-text engine come
from addresses on claim contacts, 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="root.PostalCodeCriteria"/>
<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.
SELECT DISTINCT
...
addr.PostalCode
...
FROM cc_contact co
INNER JOIN cc_claimcontact cc
ON cc.contactid = co.id
INNER JOIN cc_claim cl
ON cc.ClaimID = cl.ID
LEFT OUTER JOIN cc_address a
ON co.PrimaryAddressID = a.id
...
The query is processed into an XML document that will be loaded into SQL. Batch loading of XML into Solr is
described in http://wiki.apache.org/solr/DataImportHandler#Configuration_in_data-config.xml-1.
The processed field names are all in upper case, and the structure of the XML document is:
<CONTAINER_ELEM>
<CLAIMCONTACT>
<!-- data for one claim contact -->
</CLAIMCONTACT>
</CONTAINER_ELEM>
To include the postalCode in the index, put an entry in data-config.xml that looks like the following XML code:
Within the row for one claim contact, 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.
http://wiki.apache.org/solr/LanguageAnalysis
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: http://www.w3.org/TR/REC-CSS2.
Location printing
Adding the ability to print the current location in PDF format is straightforward to configure. You add a
PrintToolbarButton element to a Screen element. For example, the following lines in the DashboardClaimCount
PCF file create a Print button in the toolbar:
<Page
canVisit="perm.User.viewedbclaimcounts"
id="DashboardClaimCount"
title="DisplayKey.get("Java.Dashboard.Title", DisplayKey.get("Java.Dashboard.ClaimCount.Title"))
">
<LocationEntryPoint
signature="DashboardClaimCount(GroupInfo : web.dashboard.DashboardTreeGroupInfo)"/>
...
<Screen
id="DashboardClaimCountScreen">
<Toolbar>
<PrintToolbarButton
available="perm.User.printlistviews"
id="PrintButton"
label="DisplayKey.get("Button.Print")"/>
<ToolbarDivider/>
...
</Screen>
</Page>
Clicking this button causes the current location, DashboardClaimCount, to print. You can also refer to another
location in the print bar by providing a locationRef.
<ToolbarButton
action=gw.api.print.ListViewPrintOptionPopupAction.printListViewWithOptions("MyListView")"
id="PrintButton"
label="DisplayKey.get("Java.ListView.Print")"/>
Customizable printing
Customizable printing uses a print options page to control exactly what ClaimCenter prints. This PCF page contains
a PrintOut element that is comparable to a Screen element. Using a PrintOut page, you can:
• Print an entire page or select parts of a page to print.
• Print a list view or a list view and its item details.
• Apply a filter to a list view before printing it.
ClaimCenter uses customizable printing to print the claim file.
You can only print a list view’s items in detail using customizable print. Not all list views are eligible for printing
details. Only list views that are screen panels are eligible for detail printing—for example a CardPanel element or
the ListViewPanel in Claim Workplan. You cannot print the detail for lists embedded in detail views.
A PrintOut page is always interactive. The page displays one or more groups of radio buttons and check boxes that
control what ClaimCenter actually prints. To use a PrintOut page, you define print elements in a single PCF file.
For organizational purposes, the file name usually contains the word print or is stored in a print directory.
ClaimCenter contains a single PrintOut page, ClaimPrintOut.pcf.
To call this PrintOut file, you trigger an action from a menu item or button that calls the page:
<MenuItem
action="ClaimPrintout.push(Claim)"
id="ClaimMenuActions_Print"
label="DisplayKey.get("Java.ClaimMenu.PrintClaim")"/>
The page takes the current claim as a variable and offers various options to print the claim.
Each PrintOut page must contain at least one of either PrintGroup or PrintLocation. A PrintOut page can
contain both PrintGroup or PrintLocation elements. The following PrintOut configuration subelements are
specific to customizable printing:
Element Description
PrintDetail Instructions on how to print elements if you elect to print details.
PrintGroup Defines a set of pages to print. This element contains one or more PrintSection elements.
ClaimCenter represents each PrintSection element in the interface with a radio button. You can
customize a PrintGroup. See “Customizable printing” on page 437 for more information on using a
customizable group.
PrintLocation Specifies a specific location to print. This element takes one or more PrintLocationDetail elements.
PrintLocationDetail Instructions on how to print elements if you elect to print details. ClaimCenter represents each print
element in the interface with a radio button.
PrintOption A set of locations that are printed together. Each PrintOption contains one more PrintOptionLocat
ion subelements.
PrintOptionLocation Specifies a page (location) to print any time that you select a PrintGroup. This element can contain
one PrintDetail.
PrintOutButton Adds a button to a PrintOut page. This element triggers printing if you select print options, or if you
cancel and close the page.
Element Description
PrintSection Represents a print selection on a PrintOut page. Each PrintSection must contain one or more Prin
tOption elements.
With the exception of the PrintDetail element, all of the PrintOut subelements specify a printable attribute.
This attribute takes a boolean expression that determines if the print option is visible. If the expression evaluates to
true, the option appears.
<PrintGroup id="AllClaimPagesWithoutDetails"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.AllClaimPagesWithoutDetails")">
...
<PrintSection
id="Workplan1Section"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.Workplan")"
printable="perm.System.viewworkplan">
<PrintOption
id="WorkplanSummaryOption"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Options.Workplan.Summary")">
<PrintOptionLocation locationRef="ClaimWorkplan(Claim)"/>
</PrintOption>
</PrintSection>
...
</PrintGroup>
The All Pages including details and FNOL snapshot option is defined in a second PrintGroup that allows you to print the
details of each page. This is accomplished through the addition of the optional PrintDetail element.
<PrintSection
id="Workplan2Section"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.Workplan")"
printable="perm.System.viewworkplan">
<PrintOption
id="WorkplanDetailsOption"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Options.Workplan.Details")">
<PrintOptionLocation
locationRef="ClaimWorkplan(Claim)">
<PrintDetail
locationRef="ActivityDetailPrint(Activity)"
symbolName="Activity"
symbolType="Activity"/>
</PrintOptionLocation>
</PrintOption>
</PrintSection>
You can configure only one list view to print for each screen. The locationRef attribute specifies a page that takes
the specified symbolName and symbolType and processes them for printing. The page in this case is the pcf/
shared/printing/ActivityDetailPrint.pcf page. This page takes the ClaimPrintOut.pcf as a parent.
The file that defines the action list view determines what you specify for the symbolName and symbolType attributes.
In this case, that file is the pcf/claim/workplan/WorkplanLV.pcf. This file populates itself from an array of
Activity elements:
<ListViewPanel id="WorkplanLV">
...
<Require name="ActivityList" type="gw.api.database.IQueryBeanResult<Activity>"/>
...
<RowIterator
editable="false"
elementName="Activity"
hasCheckBoxes="true"
value="ActivityList"
valueType="gw.api.database.IQueryBeanResult<entity.Activity>">
...
This page requires an Activity type and elements of this type are named Activity. In the print out page, the
symbolType originates from the valueType value in the list view and the symbolName from the elementName value.
<PrintLocation
id="CurrentClaimFilePagePrint"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.ThisPageWithoutDetails")"/>
To print the detail on a page, you need to account for the details on each possible page—based on the location of the
print action. In the case of a claim, the action appears in the side menu and so can appear from any page in the claim.
For example:
<PrintLocation
id="CurrentClaimFilePagePrintWithDetails"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.ThisPageWithDetails")">
<PrintLocationDetail
baseLocation="ClaimWorkplan"
locationRef="ActivityDetailPrint(Activity)"
symbolName="Activity"
symbolType="Activity"/>
<PrintLocationDetail
baseLocation="ClaimAssociations"
locationRef="ClaimAssociationDetail(Claim, ClaimAssociation)"
symbolName="ClaimAssociation"
symbolType="ClaimAssociation"/>
...
<PrintLocationDetail
baseLocation="ClaimMatters"
locationRef="MatterDetailPage(Claim, Matter)"
symbolName="Matter"
symbolType="Matter"/>
</PrintLocation
The specification of the locationRef, symbolName, and symbolType all use the same principles as the
PrintDetail element.
symbolName="Activity"
symbolType="Activity"/>
</PrintOptionLocation>
</PrintOption>
</PrintSection>
...
</PrintGroup>
This group gives you the option to print each section of the claim file either with details or without.
<PrintSection
id="History3Section"
label="DisplayKey.get("Java.PrintClaimOptionsForm.Label.History")"
printable="perm.System.viewclaimhistory">
<PrintOption
id="HistoryAllOption"
label="DisplayKey.get("Java.ListView.Filter.All")">
<PrintOptionLocation
filter="gw.api.util.CoreFilters.ALL"
listViewRef="HistoryLV"
locationRef="ClaimHistory(Claim)"/>
</PrintOption>
<PrintOptionGroup
id="HistoryOption"
typelist="HistoryType">
<PrintOptionLocation
filter="new gw.api.filters.TypeKeyFilter(VALUE,
History#Type.PropertyInfo as gw.entity.ITypekeyPropertyInfo)"
listViewRef="HistoryLV"
locationRef="ClaimHistory(Claim)"/>
</PrintOptionGroup>
</PrintSection>
The print section has two filters, both applied to the HistoryLV.pcf list view. Configure your list view to use any
valid and relevant list view filter. For example, use an exposure filter, rather than an activity filter, on an exposure
list.
<Page
canEdit="false"
canVisit="Claim.ExposureListChangeable and perm.Claim.view(Claim) and perm.System.viewexposures
and (Claim.State != ClaimState.TC_DRAFT)">
id="ClaimExposures"
title="DisplayKey.get("Web.Claim.ClaimExposures")"
...
<Variable name="PrintTargetLV" initialValue=""ExposuresLV"" type="java.lang.String"/>
<Variable name="PrintSettings" type="gw.api.print.PrintSettings"
initialValue="createPrintSettings()"/>
<Variable name="PrintClaimNumber" type="String"
initialValue="DisplayKey.get("Web.PrintOut.ClaimNumber", Claim.ClaimNumber)"/>
...
<Toolbar>
....
<ToolbarButton label="DisplayKey.get("Java.ListView.Print")" id="ClaimExposures_Print"
shortcut="N"
available="perm.User.printlistviews and perm.Claim.print(Claim)"
action="gw.api.print.ListViewPrintOptionPopupAction.printListViewWithOptions(PrintTargetLV,
PrintSettings)"/>
...
<Code>
function createPrintSettings() : gw.api.print.PrintSettings {
var newPrintSettings = new gw.api.print.PrintSettings();
var claimNumberLabel = DisplayKey.get("Web.PrintOut.ClaimNumber", Claim.ClaimNumber);
newPrintSettings.setHeaderLabel(claimNumberLabel);
newPrintSEttings.setFontSize("12px");
return newPrintSettings;
}
</Code>
</Page>
These print settings apply only if you print the page by itself—the Print button action sets them before printing. If
you print this page as part of a claim file, the settings do not apply.
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 ClaimCenter server receives a connection request with a specific entry point, ClaimCenter
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.
authenticationRe Specifies that ClaimCenter must authenticate the user before the user can access the URL. If true,
quired ClaimCenter requires that the user already be authenticated to enter. If the user is not already logged in,
ClaimCenter 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 ClaimCenter can not 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 ClaimCenter 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,
ClaimCenter, as the URI.
For example, if the URI is XXX, then it is possible to enter the application at http://myserver/myapp/XX
X.do.
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 444 for a definition of a forward.
Each EntryPoint PCF can contain one or more EntryPointParameter subelements that specifies additional
functionality.
conversionExpression Gosu expression that ClaimCenter uses to convert a URL parameter to the value passed to the
location parameter.
desc Currently, does nothing.
locationParam Required. The name of the LocationParameter on the EntryPoint target location that this
parameter sets.
optional Specifies whether the parameter is optional. If set to true, ClaimCenter does not require this
parameter.
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:
http://myserver/myapp/Activity.do?Activity=3
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.
For an example of how to define a forward, see ClaimForward in ClaimCenter Studio at pcf→claim→ClaimForward.
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 AnyURL.pcf 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.
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 ClaimCenter. 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 446.
Step 2: Modify the user interface screen to use the exit point
Procedure
1. In Guidewire Studio, create a new Button.Activity.DynamicURL 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 — Button.Activity.DynamicURL
• 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:
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.
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 – AnyURL.push(constructMyURL())
• id – DynamicURL
• label – displaykey.Button.Activity.DynamicURL
Next steps
After completing this task, complete “Step 3: Test your work” on page 447.
Procedure
1. Start the ClaimCenter 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 ClaimCenter data model, which would require a server restart.
2. Log into ClaimCenter 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. ClaimCenter presents a success message after it
reloads the PCF files from the local file system.
5. Log into ClaimCenter 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 ClaimCenter 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, ClaimCenter loads the Guidewire Internet home page into the
popup window.
This topic covers basic information about the workflow editor in Guidewire Studio.
ClaimCenter/modules/cc/config/workflow
Each file name corresponds to the workflow process that it defines (for example, MetroReport.1.xml). 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:
ClaimCenter/modules/configuration/config/workflow
See also
• “Guidewire workflow” on page 455.
For example, in the ClaimCenter base configuration, Guidewire defines a MetroReportWorkflow 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
continuing. See “ActivityStep workflow step” on page 465.
Outcome One or more Special final step that has no branches leading out of it. See “Outcome
workflow step” on page 468.
See also
• Globalization Guide
Guidewire workflow
This topic covers ClaimCenter 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 A specific running instance of a particular business process. Guidewire persists a workflow instance
instance 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
ClaimCenter saves a workflow instance as a row in the database marking the existence of a single running business
flow. ClaimCenter creates a workflow instance in response to a specific need to perform a task or function, usually
asynchronously. For example, in the base configuration, ClaimCenter provides a ready-to-use integration to the
Metropolitan Reporting Bureau (www.metroreporting.com) that it bases on workflow. You use this workflow as an
aid in obtaining police reports of accidents.
The newly created instance takes the form of a database entity called Workflow. Because ClaimCenter creates the
Workflow entity in a bundle with other changes to its associated business data, ClaimCenter does nothing with the
workflow until it commits the workflow. ClaimCenter does not send messages to any external application unless the
surrounding bundle commits successfully.
Note: For more information on the Workflow entity, consult the ClaimCenter 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.
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 ClaimCenterAdministration 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 – ClaimCenter retries a Failed work item up to the maximum retry limit.
• Checkedout – ClaimCenter processes a Checkedout work item in a specific worker's queue after the work item
reaches the head of that queue.
See also
• System Administration Guide
See also
• “Using the workflow editor” on page 451
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 Workflow.Bundle returns the workflow bundle.
See also
• Gosu Reference Guide
Workflow versioning
After you create a workflow script and make it active, it can create hundreds or even thousands of working instances
in the ClaimCenter 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 ManualExecutionWF.2.xml means workflow
type ManualExecution, version 2. As ClaimCenter 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 477.
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. ClaimCenter 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, ClaimCenter 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.
You can also:
• Set a different locale for any spawned subworkflows.
• Set a locale for a Gosu block that a workflow executes.
• Set Studio to display a workflow step name in a different locale.
See also
• “Set a workflow locale” on page 460
• 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.
Next steps
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.
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:
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, ClaimCenter 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
Workflow.currentAction == “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
461
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 ClaimCenter sends out, but which does not block the workflow from continuing. ClaimCenter 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 465 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:
Name notification
Pattern general_reminder
Each AutoStep step must have at least one “GO” on page 469 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.
Procedure
1. Right-click in the workflow workspace, and then clickNew AutoStep.
2. Enter the following fields:
Field Description
Step ID 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.
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 461 for information on the various tabs.
Just before running the Enter block, the workflow creates a new message and assigns it to Workflow.Message. 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), ClaimCenter stores an optional response string
(supplied with the ack) on the message in the Response field. ClaimCenter 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.
Procedure
1. Right-click in the workflow workspace, and select New MessageStep.
2. Enter the following fields:
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.
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.
Next steps
See also
• “Common step elements” on page 461
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 ClaimCenter marks all the activities as completed, skipped or canceled, the ActivityStep uses one or more
“GO” on page 469 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 ClaimCenter
marks the Activity as completed or canceled.
Procedure
1. Right-click in the workflow workspace, and select New ActivityStep.
2. The dialog contains the following fields:
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
example, the following initialization Gosu code creates an activity and assigns it SomeUser in SomeGroup.
Workflow.initActivity(Activity)
Activity.autoAssign(SomeGroup, SomeUser)
The initialization code creates an activity based on the activity pattern that you set in the Pattern field.
Time Delta The amount of time to wait or pause before continuing. Enter an integer number with its units (3600s, for
example).
Time A fixed point in time, as defined by a Gosu expression that resolves to a date. You can use the Gosu code to define
Absolute the date, as in the following:
PolicyPeriod.Cancellation.CancelProcessDate
Or, you can use Gosu to calculate the point in time, as in the following:
PolicyPeriod.PeriodStart.addDays(-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.
Procedure
1. Right-click in the workflow workspace, and select New ManualStep.
2. Enter the following fields. What you see in the dialog changes slightly depending on the value you set for Type
(TIMEOUT or TRIGGER).
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 Absolute Specifies a fixed point in time. For example, the following sets the point to continue to after the policy Can
celProcessDate:
PolicyPeriod.Cancellation.CancelProcessDate
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.
3. It changes the state of the workflow instance to Completed.
You must structure each workflow script so that its execution eventually and inevitably leads to an Outcome.
Otherwise, you risk infinitely-running workflows, which means that the load on ClaimCenter can increase linearly
over time, crippling performance.
Procedure
1. Right-click in the workflow workspace, and select New Outcome.
2. Enter a step ID in the New Outcome 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.
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.
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
Field Description
To ID of the step on the which the GO branch starts.
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.
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
Beware of infinite, immediately-executing cycles in your workflow scripts. For example:
From To
StepA StepB
StepB StepA
If the steps revolve in an infinite loop, ClaimCenter 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 ClaimCenter 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
ClaimCenter interface. Typically, in ClaimCenter, 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 480 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 ClaimCenter Data Dictionary entry on Workflow.)
ClaimCenter 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.
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.)
PolicyPeriod.CancellationProcess.canRescind().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 ClaimCenter 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
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,
java.util.Date.CurrentDate + 1, as the expression always evaluates to the future.
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
Workflow version 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.
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 NewWorkflow.eti 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):
<?xml version="1.0"?>
<subtype desc="" entity="NewWorkflow" supertype="Workflow">
<typekey desc="Language" name="Language" typelist="LanguageType"/>
<subtype>
<?xml version="1.0"?>
<subtype desc="" entity="ExampleWorkflow" supertype="Workflow">
<typekey desc="Language" name="Language" typelist="LanguageType"/>
</subtype>
This example does not actually perform any function. It simply illustrates how to work with the dialogs of the
Workflows editor.
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:
Starting a workflow
There are multiple workflow start methods. The following list describes them.
See also
• “Workflow versioning” on page 458
See Also
•
<?xml version="1.0"?>
<subtype desc="HelloWorld 1 Example Workflow"
entity="HelloWorld1"
supertype="ClaimWorkflow">
<typekey desc="Language" name="Language" typelist="LanguageType"/>
</subtype>
Notice that it has a claim symbol set in “<Context> workflow element” on page 461.
1. For Step1, add the following to the Enter block for that step:
2. For Step2, add the following to the Enter block for that step:
claim.PermissionRequired=="fraudriskclaim"
Rule Actions:
if (hw_wf == null) {
gw.api.util.Logger.logInfo( "## Studio instantiating HelloWorld1 and starting it!" )
var workflow = new entity.HelloWorld1()
workflow.Claim = claim
workflow.start()
}
Distributed execution
ClaimCenter 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. ClaimCenter 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 AbstractWorkflow.startAsynchronously 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 AbstractWorkflow.resume, typically initiated by an administrator using the workflow management
tool
After the workflow advances as far as it can, ClaimCenter deletes the work item and execution stops until there is
another work item.
The trigger parameter defines the TRIGGER to use. This 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 calling 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 workflow 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).
Thus, if both of 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
Invoking a trigger (either synchronously or asynchronously) does the following:
1. It updates the workflow. Any changes made to a transaction bundle that were committed by the actual
invocation of the trigger, are committed.
2. It causes the workflow to create a log entry of the trigger request. If there is an error in the workflow advance,
any request to the workflow to resume causes the process to start again.
3. If the Workflow engine determines that all the preconditions are met for continuing, it does the following:
a. It determines the locale in which to execute.
This is the locale that ClaimCenter uses for display keys, dates, numbers, and other similar items. By
default, this is the application default locale. It is important for the Workflow engine to determine the
locale as it is possible to override this locale for any specific workflow subtype. You can also override the
locale in the workflow definition on the workflow element.
4. It steps through each of the workflow steps (meaning that it performs all the actions within that step) until it
cannot keep going.
5. It commits the transaction associated with the executed steps to the database.
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 ClaimCenter 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:
Workflow.createSubFlow(workflow)
Workflow.createSubFlow(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 Workflow.caller. (If internal code, and not some other workflow, calls a
macro workflow, this field is null.)
Each workflow also has a subFlows 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:
Workflow.SubFlows
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
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 ClaimCenterAdministration→Workflows page
• Through the command line, such as running a batch process to purge the workflow logs
• Through class gw.webservice.workflow.IWorkflowAPI, which the command line uses
The most likely need for using the ClaimCenterAdministration 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 ClaimCenter
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, ClaimCenter 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 time Select and enter a time to force the workflow to wait until either that amount of time has expired or the
(secs) currently 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, ClaimCenter presents a list of
available triggers from which to choose, if any are available on this workflow.
Command Description
Suspend Select to suspend any active workflows that are currently selected in the previous screen. After you execute
this command, ClaimCenter suspends the selected workflows. This action is appropriate for all workflow and
steps. However, ClaimCenter executes this command only against active workflows.
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 branch Select to choose a workflow timeout branch. After selecting this command, ClaimCenter presents a list of
timeout 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 Use to view information on the last run-time of a writer, and to see the schedule for its next run-time. From
Info 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.
See also
• Application Guide
Workflow.log(summary, description)
The method returns the log entry (WorkflowLogEntry) that you can use for additional processing:
Process logging
The following logging categories can be useful:
WorkQueue.Item Logging (by workers) of each work item executed at the “info” level.
WorkQueue.Runner Logging runners.
To write every message logged by every workflow, set the logging level of the workflow logger category to DEBUG
(using logging.properties). The directive in the logging.properties file is:
log4j.category.Server.workflow=DEBUG
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 ClaimCenter assigns an activity. Instead, activity assignment methods in
the assignment rules or in Gosu expressions control how ClaimCenter 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.
Entity.ActivityPattern.Code == "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.) ClaimCenter 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, ClaimCenter 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.
ClaimCenter 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,
ClaimCenter 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 ClaimCenter application code requires them. You can change other fields associated with
these types, however.
See also
• System Administration Guide
EscalationStartPt Escalation start The initial date used to calculate the target date. If you specify escalationdays or esca
point lationhours, you need to specify this parameter. Otherwise, this parameter is
optional.
You can set this field to the following values:
• activitycreation — The activity’s creation date.
• claimnotice — The FNOL date which is the claim’s “reported date.”
• lossdate — The date the accident or injury occurred)
Procedure
1. Log into Guidewire ClaimCenter under an administrative account and access the following screen:
Administration→Activity Patterns
2. Open the activity pattern edit screen by either creating a new activity pattern or selecting an activity pattern to
update.
3. Use the search icon next to the Document Template or Email Template field to open a search window.
4. 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, ClaimCenter does the following:
Guidewire includes support for sending emails from ClaimCenter. Sending an email is one of several possible
actions to take, for example, if a user escalates an activity or notes a claim exception.
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
ClaimCenter initially saves email messages and then sends them to an SMTP email server in a background process.
Procedure
1. In the ClaimCenter Studio Project window, expand configuration→config→Plugins→registry.
2. Double-click emailMessageTransport to open it.
3. If the Disabled check box is checked, clear the check box to enable the plugin.
4. Enter appropriate values for the following parameters:
• defaultSenderAddress
• defaultSenderName
• smtpHost
• smtpPort
5. Save your changes.
6. Restart the ClaimCenter server.
gw.api.email.Email
The Emailclass contains the following fields, most of which are self-explanatory:
Field Description
Subject Subject of the email
Body Content of the email
Sender Sender of the email
ReplyTo Contact object (It is possible for this to be different from the Sender.)
gw.api.email.EmailContact
The EmailContact class contains the following fields:
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 claim, exposure, or activity. ClaimCenter uses this
parameter only while processing the email for transmission. See “Email transmission” on page 498.
...
var testEmail : gw.api.email.Email
testEmail.Body = "This is a test."
testEmail.Subject = "Test"
...
gw.api.email.EmailUtil.sendEmailWithBody( thisClaim, testEmail )
You can also attach multiple To, CC, and BCC addresses to the email.
gw.api.email.EmailUtil.sendEmailWithBody(thisClaim, thisClaim.AssignedGroup.Supervisor.Contact,
thisClaim.AssignedUser.Contact, "A claim got a ClaimValid event", "This is the text." )
Email transmission
Guidewire ClaimCenter, from the user's perspective, sends emails asynchronously by using the ClaimCenter
Messaging subsystem. If there is a method call for one of the EmailUtil.sendEmail methods, ClaimCenter 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, ClaimCenter adds the Message entity to the entity transaction bundle.
ClaimCenter persists the Message entity any time that it creates the bundle.
• If the entity parameter is null, ClaimCenter persists the Message entity immediately.
ClaimCenter 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 EmailReceived.gosu.descriptor file pairs with the actual template file (EmailReceived.gosu):
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 .gosu.html 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,
Text New→File .gosu.descriptor Select Text from the list of file types to associate with the .g
osu.descriptor extension, if necessary.
HTML New→HTML File .gosu.html.descriptor 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 CreateEmailScreen.pcf 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 CreateEmailScreen.pcf 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.
EmailEnhancement.gsx
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 gw.api.email
uses gw.api.util.DisplayableException
uses gw.document.TemplatePluginUtils
uses gw.plugin.email.IEmailTemplateDescriptor
uses java.io.StringReader
uses java.util.Map
uses java.util.HashSet
uses gw.api.util.LocaleUtil
uses gw.api.system.PLLoggerCategory
CreateEmailScreen.pcf
The following example code adds additional functionality to the base configuration ClaimCenter
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
EmailEnhancement.gsx.
Note: This example uses display keys that do not exist in the base configuration. You must add the missing display
keys to display.properties in order to see the correct labels.
<?xml version="1.0"?>
<PCF
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../../../pcf.xsd">
<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="gw.api.util.LocaleUtil.getDefaultLanguageType()"
name="language"
type="LanguageType"/>
<Variable
initialValue="initializeSymbolTable()"
name="symbolTable"
type="java.util.Map<String,Object>"/>
<Variable
initialValue="new String()"
name="content"
type="String"/>
<Variable
initialValue="emailTemplateName == null ? null : fetchTemplate()"
name="template"
type="gw.plugin.email.IEmailTemplateDescriptor"/>
<Variable
initialValue="initNewEmail()"
name="NewEmail"
type="gw.api.email.Email"/>
<Toolbar>
<ToolbarButton
action="sendEmailToRecipients(NewEmail)"
available="true"
id="ToolbarButton0"
label="DisplayKey.get("Web.Activity.Email.SendEmail")"
visible="true"/>
<ToolbarButton
action="CurrentLocation.cancel()"
available="true"
id="ToolbarButton1"
label="DisplayKey.get("Web.Activity.Email.Cancel")"
visible="true"/>
<ToolbarDivider/>
<PickerToolbarButton
action="PickEmailTemplatePopup.push(createSearchCriteria())"
id="EmailWorksheet_UseTemplateButton"
label="DisplayKey.get("Web.Activity.Email.UseTemplate")"
onPick="template = PickedValue;
language = gw.api.util.LocaleUtil.toLanguageType(PickedValue.Locale);
executeTemplate(NewEmail)"
shortcut="P"
visible="noDefaultTemplate"/>
</Toolbar>
<AlertBar
id="NoDefaultTemplate"
label="DisplayKey.get("Web.Email.Template.NotFound", emailTemplateName)"
showConfirmMessage="false"
visible="emailTemplateName != null and noDefaultTemplate"/>
<DetailViewPanel>
<InputColumn>
<TypeKeyInput
editable="true"
id="Language"
label="DisplayKey.get("Web.EmailTemplateSearch.Language")"
required="true"
value="language"
valueType="typekey.LanguageType"
visible="LanguageType.getTypeKeys( false ).Count > 1 and emailTemplateName != null">
<PostOnChange
onChange="template = fetchTemplate(); executeTemplate(NewEmail)"/>
</TypeKeyInput>
<ListViewInput
editable="true"
id="ToRecipientLVInput"
label="DisplayKey.get("Web.Activity.Email.ToRecipients")"
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 gw.api.email.EmailContact();
NewEmail.addToRecipient(newEmailContact); return newEmailContact;"
toRemove="NewEmail.removeToRecipient( ToRecipient )"
validationLabel="DisplayKey.get("Web.Activity.Email.ToRecipients")"
value="NewEmail.ToRecipients?.toTypedArray()"
valueType="gw.api.email.EmailContact[]">
<Row
editable="true">
<TextCell
editable="true"
id="ToName"
label="DisplayKey.get("Web.Activity.Email.Name")"
maxChars="60"
numCols="15"
value="ToRecipient.Name"/>
<TextCell
editable="true"
id="ToEmail"
label="DisplayKey.get("Web.Activity.Email.EmailAddress")"
numCols="15"
requestValidationExpression="VALUE == null ?
DisplayKey.get("Web.Activity.Email
.Error.AddressForToRecipientRequried") : null"
required="true"
value="ToRecipient.EmailAddress"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<ButtonInput
action="showCC = true"
id="ShowCCRecipients"
labelAbove="true"
value="DisplayKey.get("Web.Activity.Email.AddCCRecipients")"
visible="!showCC"/>
<ListViewInput
editable="true"
id="CcRecipientLVInput"
label="DisplayKey.get("Web.Activity.Email.CCRecipients")"
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 gw.api.email.EmailContact();
NewEmail.addCcRecipient(newEmailContact); return newEmailContact;"
toRemove="NewEmail.removeCcRecipient( CcRecipient )"
value="NewEmail.CcRecipients?.toTypedArray()"
valueType="gw.api.email.EmailContact[]">
<Row
editable="true">
<TextCell
editable="true"
id="CcName"
label="DisplayKey.get("Web.Activity.Email.Name")"
numCols="15"
value="CcRecipient.Name"/>
<TextCell
editable="true"
id="CcEmail"
label="DisplayKey.get("Web.Activity.Email.EmailAddress")"
numCols="15"
required="true"
value="CcRecipient.EmailAddress"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<ButtonInput
action="showBCC = true"
id="ShowBCCRecipients"
labelAbove="true"
value="DisplayKey.get("Web.Activity.Email.AddBCCRecipients")"
visible="!showBCC"/>
<ListViewInput
editable="true"
id="BccRecipientLVInput"
label="DisplayKey.get("Web.Activity.Email.BCCRecipients")"
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 gw.api.email.EmailContact();
NewEmail.addBccRecipient(newEmailContact); return newEmailContact;"
toRemove="NewEmail.removeBccRecipient( BccRecipient )"
value="NewEmail.BccRecipients?.toTypedArray()"
valueType="gw.api.email.EmailContact[]">
<Row
editable="true">
<TextCell
editable="true"
id="BccName"
label="DisplayKey.get("Web.Activity.Email.Name")"
numCols="15"
value="BccRecipient.Name"/>
<TextCell
editable="true"
id="BccEmail"
label="DisplayKey.get("Web.Activity.Email.EmailAddress")"
numCols="15"
required="true"
value="BccRecipient.EmailAddress"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
<InputDivider/>
<CheckBoxInput
editable="true"
id="SaveAsDocument"
value="saveAsDocument"
valueLabel="DisplayKey.get("Web.Activity.Email.SaveAsDocument")"/>
</InputColumn>
<InputColumn>
<TextInput
editable="true"
id="SenderName"
label="DisplayKey.get("Web.Activity.Email.SenderName")"
value="NewEmail.Sender.Name"/>
<TextInput
editable="true"
id="SenderEmail"
label="DisplayKey.get("Web.Activity.Email.SenderEmail")"
value="NewEmail.Sender.EmailAddress"/>
<TextInput
editable="true"
id="Subject"
label="DisplayKey.get("Web.Activity.Email.Subject")"
requestValidationExpression="VALUE == null ?
DisplayKey.get("Web.Activity.Email.Error.SubjectRequired") : null"
required="true"
value="NewEmail.Subject"/>
<TextAreaInput
editable="true"
id="Content"
label="template.ContentPrompt"
numCols="60"
numRows="10"
required="false"
value="content"
visible="template.Html">
<PostOnChange
onChange="executeTemplate(NewEmail)"/>
</TextAreaInput>
<TextAreaInput
editable="true"
id="Body"
label="DisplayKey.get("Web.Activity.Email.Body")"
numCols="60"
numRows="10"
requestValidationExpression="VALUE == null ?
DisplayKey.get("Web.Activity.Email.Error.BodyRequired") : null"
required="true"
value="NewEmail.Body"
visible="!template.Html"/>
<ListViewInput
editable="true"
id="AttachedDocuments"
label="DisplayKey.get("Web.Activity.Email.AttachedDocuments")">
<Toolbar>
<PickerToolbarButton
action="PickExistingDocumentPopup.push(docContainer)"
id="AddDocumentButton"
label="DisplayKey.get("Web.Activity.Email.AddDocument")"
onPick="NewEmail.addDocument(PickedValue)"
shortcut="A"
visible="true"/>
<IteratorButtons
addVisible="false"
iterator="AttachedDocumentsLV"/>
</Toolbar>
<ListViewPanel
editable="true"
id="AttachedDocumentsLV">
<RowIterator
editable="true"
elementName="AttachedDocument"
toRemove="NewEmail.removeDocument( AttachedDocument )"
value="NewEmail.Documents?.toTypedArray()"
valueType="entity.Document[]">
<Row>
<TextCell
editable="true"
id="Document"
label="DisplayKey.get("Web.Activity.Email.DocumentName")"
value="AttachedDocument.Name"/>
</Row>
</RowIterator>
</ListViewPanel>
</ListViewInput>
</InputColumn>
</DetailViewPanel>
<TemplatePanel>
<TemplatePanelContents><![CDATA[
<% if (template != null && template.Html) printContent(NewEmail.Body, false) %>]]>
</TemplatePanelContents>
</TemplatePanel>
<Code><![CDATA[function initializeSymbolTable() : java.util.Map<String,Object> {
return { "activity" -> srcBean }
}
documentToSave.MimeType = emailSentDocTemplate.MimeType
documentToSave.Type = typekey.DocumentType.get(emailSentDocTemplate.TemplateType)
documentToSave.Section = typekey.DocumentSection
.get(emailSentDocTemplate.getMetadataPropertyValue( "section" ) as String)
documentToSave.SecurityType = typekey.DocumentSecurityType
.get(emailSentDocTemplate.DefaultSecurityType)
documentToSave.Status = TC_FINAL
var recpName = emailToSend.ToRecipients.first().Name
documentToSave.Recipient = recpName == null ? emailToSend.ToRecipients.first().EmailAddress : recpName
documentToSave.Activity = docContainer
documentToSave.DateCreated = gw.api.util.DateUtil.currentDate()
documentToSave.Author = User.util.CurrentUser.DisplayName
documentToSave.Inbound = false
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 ClaimCenter server starts, and debug messages appear in the Run tool window in Studio.
Result
The ClaimCenter server starts, and debug messages appear in the Debug tool window in Studio.
Next steps
See also
• “The Studio debugger” on page 514
Procedure
1. Start the ClaimCenter 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.
Result
The debugger connects to the ClaimCenter server, and debug messages appear in the Debug tool window in Studio.
Procedure
1. Start the ClaimCenter 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 ClaimCenter 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 ClaimCenter 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 ClaimCenter server, and debug messages appear in the Debug tool window in Studio.
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:
514 chapter 34 Testing and debugging your configuration
Configuration Guide 9.0.5
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.
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.)
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 Resume normal execution, but pause again at the next breakpoint, if any. To continue debugging, click
debugging Resume 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 ClaimCenter 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 ClaimCenter server in debug mode, see “Testing ClaimCenter with Guidewire Studio” on page 511.
See also
• “Run scratchpad code in the application server debug process” on page 517.
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
gwxmlmodule.xml.
2. Double-click the file gwxmlmodule.xml to edit it.
3. Edit the desired <module> element, and set the attribute generate-xml-sources to true.
For example:
Procedure
1. In Guidewire Studio, click File→Settings.
2. In the Settings dialog, in the navigation list, expand Build, Execution, Deployment, then expand Compiler, and then
click Gosu Compiler.
3. To treat PCF errors as warnings that do not cause a build to fail, set Treat PCF code generation errors as warnings.
gw.api.util.Logger.logDebug
gw.api.util.Logger.logError
gw.api.util.Logger.logInfo
gw.api.util.Logger.logTrace
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 511 for details.)
Note: Guidewire does not recommend or support the use of classes that extend
gw.api.databuilder.DataBuilder or classes that reside in the gw.api.databuilder.* package in a production
environment. Guidewire provides GUnit as a development test facility only.
_transCurrency = Currency.TC_EUR
...
}
...
}
The following is another example for initializing a class that uses a third-party library:
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 529 for details on how to create test data.
• See “Creating and testing a builder for a custom entity” on page 537 for details of using the beforeClass
method to create test data before running a test.
@gw.testharness.ServerTest
Or, you can add a uses statement at the beginning of the file, for example:
uses gw.testharness
...
@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.
ClaimCenter 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 gw.testharness.TestBase to the class definition. All GUnit tests that you create must extend this class.
(See the “The TestBase class” on page 521 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.
@RunLevel Allows a test to run at a different run level. The default value is Runlevel.NO_DAEMONS. You
can, however, change the run level to one of the following (although each level takes a bit
more time to set up):
• Runlevel.NONE - Use if you do not want any dependencies at all.
• Runlevel.SHUTDOWN - Use if you want all the basic dependencies set up, but with no
database connection support.
• Runlevel.NO_DAEMONS - Use for a normal server startup without background tasks.
(This is also subtable for SOAP tests.)
• Runlevel.MULTIUSER - Use to start a complete server (batch process, events, rules,
Web requests, and all similar components).
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.
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 525
• “Test Kind” on page 526
• “VM options” on page 526
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 526 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:
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.
package AllMyTests
uses gw.testharness.TestBase
@gw.testharness.ServerTest
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 523 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
• 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
...
assertEquals(a, b)
assertEquals("reason for failure", a, b)
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.
Procedure
1. In the Project tool window, navigate to configuration→gtest.
2. Right-click gtest, and then click New→Package.
3. In the Enter new package name text box, type the name of the package.
4. Right-click the new package, and then click New→Gosu Class.
5. In the Name text box, type the name of the test class. This class file name must match the test class name and
both must end in “Test”. This action creates a class file containing a “stub” class.
For example, if your class file is MyTest.gs, Studio populates the file with the following Gosu:
package demo
@gw.testharness.ServerTest
class MyTest extends gw.testharness.TestBase {
construct() {
...
}
...
}
Procedure
1. In the Project tool window, navigate to configuration → gtest, and then to your test class.
2. Right-click the test, and then click either Run ‘TestName’ or Debug ‘TestName’. This action opens a test console at
the bottom of the screen.
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 524.
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 gw.api.databuilder.DataBuilder. To view a list of valid builder types
in Guidewire ClaimCenter, use the Studio code completion feature. Type gw.api.databuilder. in the Gosu editor
and Studio displays the list of available builders.
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 gw.api.databuilder.AccountBuilder
@gw.testharness.ServerTest
class MyTest extends TestBase {
construct(testname : String) {
super(testname)
}
...
function testSomething() {
//perform some test
var account = new AccountBuilder().create()
}
...
}
new TypeOfBuilder()
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:
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:
Initial Indicates
word
on A link to a parent. For example, PolicyPeriod is on an Account, so the method is onAccount(Account account).
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 DataBuilder.with(...) 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.
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.
builderObject.create( bundle )
builderObject.create()
builderObject.createAndCommit()
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.
Method Description
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()
address.Bundle.commit()
In this example, Address and Person share a bundle, so committing address.Bundle 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.
uses gw.transaction.Transaction
function myTest() {
var person : Person
uses gw.api.databuilder.ClaimBuilder
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:
function myTest(){
var account : Account
Transaction.runWithNewBundle( \ bundle -> {
account = new AccountBuilder().create(bundle)
})
}
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 gw.api.builder.AccountBuilder
uses gw.api.builder.CompanyBuilder
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 gw.api.builder.AccountBuilder
uses gw.api.builder.CompanyBuilder
uses gw.api.builder.AddressBuilder
uses gw.api.databuilder.OfficialIDBuilder
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 gw.api.builder.AccountBuilder
uses gw.api.databuilder.OfficialIDBuilder
uses gw.api.builder.AddressBuilder
uses gw.api.builder.CompanyBuilder
.withPostalCode("94404-" + code)
.asBusinessAddress()
)
.withOfficialID(new OfficialIDBuilder()
.withType("FEIN")
.withValue("11-222" + code))
)
.createAndCommit()
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 gw.api.databuilder.PersonBuilder
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 (gw.api.databuilder.DataBuilder), place your newly created
builder class in the gw.api.databuilder 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
529):
Initial Indicates
word
on A link to a parent. For example, PolicyPeriod is on an Account, so the method is onAccount(Account account).
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 DataBuilder.set and DataBuilder.addArrayElement.
You can provide property values as any of the following:
• Simple values.
• Beans to be used as subobjects.
• Other builders, which ClaimCenter uses to create subobjects if it calls your builder's create method.
• Instances of gw.api.databuilder.ValueGenerator, which can, for example, generate a different value (to
satisfy uniqueness constraints) for each instance constructed.
DataBuilder.set and DataBuilder.addArrayElement optionally accept an integer order argument that
determines how ClaimCenter configures that property on the target object. (ClaimCenter 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. ClaimCenter 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.
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 ExtCredential.eti and
enter the following:
<?xml version="1.0"?>
<entity xmlns="http://guidewire.com/datamodel" 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 User.etx (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:
Next steps
See also
• For information on extending the Guidewire ClaimCenter base configuration entities, see “Extending a base
configuration entity” on page 238.
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.
For example:
package AllMyClasses
uses gw.api.databuilder.DataBuilder
construct() {
super(ExtCredential)
}
package MyTests
uses AllMyClasses.ExtCredentialBuilder
uses gw.transaction.Transaction
@gw.testharness.ServerTest
class ExtCredentialBuilderTest extends gw.testharness.TestBase {
function beforeClass () {
Transaction.runWithNewBundle( \ bundle -> {
credential = new ExtCredentialBuilder()
.withType( "SystemOne" )
.withUserName( "Peter Rabbit" )
.withPassword( "carrots" )
.create( bundle )
}
)
}
function testUsername() {
assertEquals("User names do not match.", credential.UserName, "Peter Rabbit")
}
function testPassword() {
assertEquals("Passwords do not match.", credential.Password, "carrots")
}
There are several aspects of policy behavior that you can configure in ClaimCenter.
CoverageLine Legend
PolicyPeriodID
A B A has a B
Claim Graph
PolicyPeriod and AggregateLimit and associated entities are cross-claim entities, which encompass multiple
claims. They are not archivable and stay behind in the production database. Each Claim has one Policy object
which holds policy data from the policy administration system and belongs to the claim. The Policy belongs to the
claim graph and is archived with it. The ClaimInfo entity is not archived and is the connecting point between the
admin/cross-claim data and the claim graph. Therefore, each PeriodPolicy (a join entity) points to its
PolicyPeriod and to a ClaimInfo to indicate that the Claim/Policy is in the PolicyPeriod.
<AggLimitCalcCriteriaDefinition code="calc_criteria">
<ExclusionCriteria excludeCostType="cost_type" excludeCostCategory="cost_category"/>
</AggLimitCalcCriteriaDefinition>
The following conditions apply when defining aggregate limit calculation criteria:
• At least one AggLimitCalcCriteria definition is mandatory. In the base configuration,
AggLimitCalcCriteria.tti contains all, which cannot be removed, but can be retired.
• You can have only one AggLimitCalcCriteriaDefinition entry marked as default. This covers cases where a
policy type is not listed in any LimitUsedDef section.
• If AggLimitCalculationCriteriaDefinition uses a code that is not defined in the AggLimitCalcCriteria
typelist, even if retired, the application server will fail to start and indicate the error in the configuration. This
definition cannot be applied to any new aggregate limits, but existing ones will continue to work.
Note: The aggregate limits batch process needs access to the calculation criteria definition from the
aggregatelimitused-config.xml file to recalculate the limit used, even if the typecode is retired.
• If an active code in the AggLimitCalcCriteria typelist is not defined by any AggLimitCalculationCriteria
element, the server will fail to start.
Every LimitUsedDef element contains one subelement, AggLimitPolicyType, and two attributes, calctype and
aggLimitCalculationCriteriaDefault.
• The AggLimitPolicyType subelement specifies the policy types that share the same limit definition. You must
list at least one policy for a definition. The code attribute defines the policy type. The PolicyType typelist
defines the list of possible types. A policy type can only be included in one LimitUsedDef element.
• The calctype attribute defines the financial calculation to apply while determining the realized amount of an
aggregate limit. The calctype can be one of the following:
Type Description
TotalIncurredGross The sum of total reserves plus non-eroding payments.
TotalIncurredNet The sum of total reserves plus non-eroding payments minus recoveries.
TotalPayments The sum of all submitted payments and awaiting-submission payments
whose scheduled send date is either before or on the current date.
TotalIncurredNetMinus The sum of total reserves excluding recovery reserves that are still open.
OpenRecoveryReserves
Type Description
Payments
• The aggLimitCalculationCriteriaDefault attribute defines the default calculation criteria to be used towards
this limit. The value of this attribute must match the code of one of the previously defined
AggLimitCalcCriteriaDefinition subelements.
• The AggLimitCalcTypeDefault element defines the default calculation type to use if a policy type is not listed
in the LimitUsedDef element. The calculation type determines the transaction subtypes to apply towards the
limit used in the aggregate limit. In the case of account-level aggregate limits, the calculation type is the system
default.
<AggregateLimitUsedConfig
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="aggregatelimitused-config.xsd">
<AggLimitCalcCriteriaDefinition code="costTypesExcludingExpenses">
<ExclusionCriteria excludeCostType="unspecified"/>
<ExclusionCriteria excludeCostType="dccexpense"/>
<ExclusionCriteria excludeCostType="aoexpense"/>
</AggLimitCalcCriteriaDefinition>
<AggLimitCalcCriteriaDefinition code="costTypesExcludingLegalExpenses">
<ExclusionCriteria excludeCostType="unspecified" excludeCostCategory="legal"/>
<ExclusionCriteria excludeCostType="aoexpense" excludeCostCategory="legal"/>
<ExclusionCriteria excludeCostType="dccexpense" excludeCostCategory="legal"/>
</AggLimitCalcCriteriaDefinition>
<AggLimitCalcTypeDefault defaultCalctype="TotalIncurredNet"/>
<LimitUsedDef
calctype="TotalIncurredNet"
aggLimitCalculationCriteriaDefault="costTypesExcludingExpenses">
<AggLimitPolicyType code="PersonalAuto"/>
<AggLimitPolicyType code="BusinessAuto"/>
</LimitUsedDef>
</AggregateLimitUsedConfig>
For the policy types included in the LimitUsedDef subelement, the total incurred net value of financial transactions
is used in the aggregate limit calculation. The calculation criteria for aggregate limits defined for these policy types
will default to the corresponding value in the typelist for costTypesExcludingExpenses. You can still choose to
change the calculation criteria while creating the aggregate limit.
IMPORTANT Changing the aggregatelimitused-config.xml file can have multiple implications. You might
have to run the aggregate limits batch process again, depending on the type of change.
See Also
• System Administration Guide
WARNING After you create a policy period definition and ClaimCenter begins to use it, do not attempt to
change it. Guidewire does not support updating policy periods to reflect a new policyperiod-config.xml
definition.
<PolicyPeriodDef type="type">
<PolicyTypeConfig code="policy_type"/>
...
<PolicyField fieldName="fieldName"/>
...
</PolicyPeriodDef>
Note: If you do not define at least one PolicyPeriodDef, you effectively disable aggregate limits in your
installation.
• The type parameter takes one of two values: policy or account.
• The PolicyTypeConfig element specifies the policy type to which the definition applies. This is a code from the
PolicyType typelist. PolicyPeriodDef must include a PolicyTypeConfig element for each policy type that
you want to include in the definition. The PolicyField element specifies a policy data field to include in the
period definition. There are five allowable fields, all of which are also fields of the PolicyPeriod entity.
◦ AccountNumber – Used with policy period definitions of type “account.” A case-sensitive text field in a
policy’s definition identifies the name or number of the account to which the policy belongs.
◦ PolicyNumber – The alphanumeric value that ClaimCenter uses to identify a policy.
◦ EffectiveDate – The date on which an individual policy goes into effect.
◦ ExpirationDate – The date on which an individual policy goes out of effect.
◦ PolicySuffix – The unique, alphanumerical value that you append to a policy number to differentiate
between effective years for a policy, also called Mod or Module. Typically, you use this only for policy
◦ periods of type policy.
The PolicySuffix field acts as an implicit time period. It identifies both an effective date and an expiration
date. By including the suffix, you ensure that claims made in different years are not mistakenly aggregated into
the same limit.
<PolicyPeriodDef type="policy">
<PolicyTypeConfig code="PersonalAuto"/>
<PolicyTypeConfig code="BusinessAuto"/>
<PolicyField fieldName="PolicyNumber"/>
<PolicyField fieldName="PolicySuffix"/>
</PolicyPeriodDef>
This definition specifies that a single aggregate limit applies for all policies that meet the following criteria:
• All are either of type personal auto or commercial auto and
• All have the same policy number and
• All have the same policy suffix
<PolicyPeriodDef type="account">
<PolicyTypeConfig code="GeneralLiability"/>
<PolicyTypeConfig code="CommercialProperty"/>
<PolicyTypeConfig code="InlandMarine"/>
<PolicyTypeConfig code="Homeowners"/>
<PolicyField fieldName="AccountNumber"/>
<PolicyField fieldName="EffectiveDate"/>
<PolicyField fieldName="ExpirationDate"/>
</PolicyPeriodDef>
This definition specifies that the policies included in the limit meet the all of the following criteria:
• All are of type general liability, commercial property, inland marine, or homeowners LOB
• All have the same AccountNumber value
• All have the same effective date
• All have the same expiration date
maintenance_tools -rebuildagglimits
This command finds all policy periods with at least one invalid aggregate limit and rebuilds all limits within that
period.
• To rebuild aggregate limits for a single claim or one or more comma-separated claims:
• To rebuild aggregate limits for a single policy or one or more comma-separated policies:
This topic describes the AggregateLimitTransactionPlugin and illustrates its use with some configuration
examples.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
Name Value
name AggregateLimitsApply
type bit
desc Flag that indicates if this claim applies towards aggregate limits.
/**
* Implementation that uses a custom AggregateLimitsApply field to turn aggregate limits
on/off per claim.
*/
class ExampleAggregateLimitPlugin implements IAggregateLimitTransactionPlugin
{
}
}
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
if (limit.ValueType != deductibleType)
return _delegate.aggregateLimitApplies(limit, transaction)
else
return _delegate.aggregateLimitApplies(limit, transaction)
and transaction.RecoveryCategory == WITH_LIMITS
Procedure
1. Right-click the Policy.eti file and select New→Entity Extension to create Policy.etx.
2. Internal-only fields can be regular columns, foreign keys, or arrays.
Use the <internalonlyfields> element to list the fields that are internal to ClaimCenter, and use the
<internalfield> element to identify a particular field. You can list multiple <internalfield> elements,
with each specifying one field.
Define your internal-only field in that file, for example:
Result
In the Policy:General screen, notice that under the Other section, the Verified Policy field is still set to Yes.
This topic explains how to configure snapshot views for use with your claims.
ClaimCenter uses a method to retrieve the Version value from the snapshot data. The mode attribute of the
ScreenRef element uses the Version to locate the appropriate PCF file. The current release uses the PCF files in the
default folder, for example ClaimSnapshotLossDetailsScreen.default.pcf. For previous releases, you see
release-specific matches for this modal call:
• ClaimSnapshotLossDetailsScreen.300.pcf
• ClaimSnapshotLossDetailsScreen.310.pcf
• …
• ClaimSnapshotLossDetailsScreen.800.pcf
For example, if you request snapshots created with ClaimCenter 8.0, the application renders the loss details by using
the 800→ClaimSnapshotLossDetailsScreen.800 file.
The PCF file takes as arguments the Claim and the Snapshot. The code declares the Snapshot variable as
dynamic.Dynamic. ClaimCenter uses this variable to build and display a snapshot object by examining the XML in
the ClaimData property on the ClaimSnapshot object.
The properties of the claim snapshot are also dynamic. To access the properties of the dynamic snapshot, you use the
snapshot API provided by util.Snapshot. For example, to get the type of a contact for the claim, use code similar
to the following line.
util.Snapshot.getEntityType(myContact)
See also
• Gosu Reference Guide
This FNOL snapshot configuration task is the most common one. Typically, data rendered in a snapshot page
must be the same data and be presented in the same way as data in the corresponding data view. You add entity
listings to or remove them from files as needed.
• Adding a new page or panel view.
This situation usually arises if you have added one or more custom pages. If you add a custom page, you also
need to modify the appropriate pages to reference your new page.
IMPORTANT Use source control or a backup to save original versions of the ClaimCenter default snapshot
templates before you modify them.
A line of business (LOB) is a business unit that is independent of other business units in a company. ClaimCenter
enables you to model the responsibilities of each business unit of an insurance carrier. When you model the business
structure, you also configure ClaimCenter screens and methods of handling claims for each part of your business.
You model your business structure by configuring the relationships between a set of typelists:
• LossType and LOBCode – Model which business units cover each kind of loss.
• LOBCode and PolicyType – Model the kinds of policies written by each business unit.
• PolicyType and CoverageType – Model the types of coverages that policies can contain.
• CoverageType and CoverageSubtype and ExposureType – Model the kinds of exposures that are compatible
with coverages.
In the base configuration, the LOB typelists contain values for the following lines of business:
• Businessowners Line
• Commercial Auto Line
• Commercial Property Line, which includes Commercial Package and Commercial Property policy types
• General Liability Line
• Homeowners Line
• Inland Marine Line
• Other Liability Line, which includes Farmowners and Professional Liability policy types
• Personal Auto Line
• Personal Umbrella Line
• Travel
• Workers’ Compensation Line
You can define new lines of business by adding to LOBCode and the other LOB typelists.
LOB typelists
ClaimCenter uses a set of typelists, the line of business typelists, to configure the screens you see when entering a
new claim and working with existing ones. You can see these typelists in ClaimCenter Studio by navigating in the
Project window to configuration→config →Extensions →Typelist.
Because the typelists have a hierarchical relationship, the Line of Business tab of the Typelists editor displays the
values of the typelists as a tree. For example, with the LossType typelist open in the editor, the Line of Business tab
displays a number of LOBCode children for each LossType typecode. Each LOBCode child has PolicyType children,
and so on.
In the base configuration, ClaimCenter provides the following LOB typelists, listed in hierarchical order:
• LossType.ttx – A category of activity that is an industry standard for insurance activity, such as Auto, Liability,
Property, or Workers’ Compensation. Selecting a loss type is one of the early steps in defining a claim. It is a way
of grouping your lines of business together.
A LossType typecode does not have a parent, but it can have multiple children that are LOBCode typecodes. The
relationship of LossType to LOBCode is one to many.
• LOBCode.ttx – A type of work handled by one business unit of an insurance company. In many cases, a claim's
LOBCode is uniquely determined by the combination of its LossType and PolicyType. If it is not, the LOBCode
can be selected in the Loss Details screen of the New Claim wizard and the claim. More than one LOB can handle
the same type of loss. For example, both personal and commercial auto LOBs sell policies covering losses from
vehicles, the Auto loss type.
An LOBCode typecode can have multiple children from the PolicyType typelist, but only one parent, a LossType
typecode. The relationship of LOBCode to LossType to is many-to-one.
• PolicyType.ttx – A product—policy—sold by an LOB unit. A policy pays damages for certain defined loss
events. One business unit can sell many types of policies. A given policy can be sold by many LOBs, so
PolicyType and LOBCode have a many-to-many relationship in the data model.
• CoverageType.ttx – A subdivision of a policy that deals with one kind of loss covered by the policy. For
example, a personal injury protection (PIP) policy could have medical, lost wages, and death coverages, so you
can associate many coverages with a specific policy. These coverages define the product that is sold. Also, a
particular type of coverage can be allowed for many policies. Thus, PolicyType and CoverageType are related
in a many-to-many relationship.
• CoverageSubtype.ttx – Specifies an ExposureType that is compatible with a CoverageType. An
ExposureType is a set of information collected in the ClaimCenter user interface when creating a exposure. A
CoverageSubtype typecode acts like a join between CoverageType and ExposureType. When the ClaimCenter
user selects a CoverageSubtype as part of creating an exposure, they are really setting the ExposureType. The
CoverageSubtype the user selects becomes a property of the Exposure and not the Coverage.
This typelist effectively relates each CoverageType to one or more ExposureType typecodes. CoverageSubtype
has many-to-one relationships to both CoverageType and ExposureType, so it effectively creates a many-to-
many relationship between CoverageType and ExposureType. By convention, if a CoverageType is compatible
only with one ExposureType, then the CoverageSubtype linking them is named after the CoverageType.
Otherwise, its name is a concatenation of the CoverageType and a string indicating the ExposureType.
• ExposureType.ttx – ExposureType controls the mode of the screen used to create, display, or edit an exposure.
This use of modes enables a relatively small number of user interface elements to be shared by exposures with a
much larger number of possible coverage subtypes. In a claim, exposures relate coverages to claimants, and an
exposure is a unique combination of a coverage and a claimant. For example, an auto accident claim would
typically have an exposure for the owner of each vehicle damaged, as well as one for each person injured. An
ExposureType cannot have any children. It has a one-to-many relationship with its parent typelist,
CoverageSubtype.
See also
• “Relationships among LOB typelists” on page 563
ExposureType CoverageSubtype -
The following diagram shows the relationships between the LOB typelists:
«typelist»
LossType
*
«typelist»
LOBCode
*
*
«typelist»
PolicyType
*
*
«typelist»
CoverageType
*
«typelist»
CoverageSubtype Legend
* A B
Bidirectional:
* * Many to Many
One to Many (A to B)
A B
«typelist» * Many to One (B to A)
ExposureType A B
Bidirectional:
One to One (B to A)
Procedure
1. Open the LOBCode typelist in the typelist editor and click the LOB tab.
2. Right-click Commercial Auto Line and chose Add new→PolicyType.
3. For Code enter additionalpip. For Name enter Additional PIP. For Description enter Additional PIP.
4. Right-click the Personal Auto Line LOB code and chose Add new→PolicyType.
5. In the Add PolicyType dialog, click the Select typecode tab and choose the PolicyType you created previously,
additionalpip. This typecode now becomes a child of both Commercial Auto Line and Personal Auto Line.
6. Navigate to Personal Auto Line→Children→Additional PIP.
7. Right-click Additional PIP and choose Add new→CoverageType.
8. In the Add PolicyType dialog, click the Select typecode tab and choose any CoverageType.
9. Navigate to Commercial Auto Line→Children→Additional PIP→Children. You can see that the CoverageType you
added under Personal Auto Line appears there as well. Because the two Additional PIP nodes represent the
same PolicyType typecode, their properties, including their set of parents and children, are always identical.
Next steps
See also
• “LOB typelist validations” on page 565
• “Editing LOB typelists and typecodes” on page 568
See also
• “LOB typelists” on page 562
CoverageType CostCategory
CovTermPattern
LineCategory
PolicyType ClaimTier
ExposureTier
InsuranceLine
LossType ClaimantType
ClaimSegment
LossCause
MetroReportType
OfficialType
PriContributingFactors
QuickClaimDefault
ResolutionType
SeverityType
ExposureType Incident
LOBCode SourceSystem
PolicyType InternalPolicyType
PolicyTab
SourceSystem
On the LOB tab, you can see the non-LOB typelists that each typecode references by selecting the typecode and then
opening its Other Categories folder.
See also
• “LOB typelists and incidents” on page 563
Typelist PCF
LossType ClaimEvaluationDetailsDV
ClaimPolicyGeneral
FNOLWizard_AssignSaveScreen
FNOLWizard_BasicInfoScreen
FNOLWizard_NewLossDetailsScreen
FNOLWizard_ServicesScreen
LossDetailsDV
NewClaimLossDetailsDV
NewClaimPolicyGeneralPanelSet
PolicyGeneralPanelSet
Typelist PCF
QuickClaimDV
ExposureType NewClaimExposureDV
ExposureDetailDV
NewExposureDV
Note: If you select the LOB tab and navigate to a typecode’s Other Categories folder, you see all the non-LOB
typelists that the typecode references. Because this folder shows only non-LOB outgoing typelist references, it
can be more useful than the Outgoing Categories tab. That tab shows all typelist references, including LOB
typelist references.
• XML – The typelist as XML. This view is read-only.
See also
• “Relationships between LOB typelists and other typelists” on page 566
If you right-click the root node, which represents the typelist itself, you can click Add new to add new typecodes to
the typelist.
See also
• For information on opening an LOB typelist for editing, see “Editing LOB typelists and typecodes” on page 568
• “LOB typelists editor right-click menu” on page 569
• “Adding a child LOB typecode” on page 570
IMPORTANT As you add LOB typecodes, pay close attention to any errors you might receive. For example, if you
add a new LOBCode typecode to the LOBCode typelist, you see an error saying that the typecode must have at least
one category from typelist PolicyType. If you ignore this error, the ClaimCenter server will not start until you
correct it.
See also
• “Relationships among LOB typelists” on page 563
• “LOB typelists editor right-click menu” on page 569
• “Editing an LOB typelist” on page 569
• “Add a non-LOB typecode” on page 571
Procedure
1. Open an LOB typelist for editing.
2. Right-click the typecode to which you want to add the reference and choose Add new→Category.
The editor opens the typecode’s Other Categories folder and adds a new node to it named <empty>. You also see
an error. The error will go away after you enter the code and typelist of the new typecode.
3. Click the new <empty> node so you can edit its properties.
4. Enter the typelist and the typecode’s code for the non-LOB typelist. If you begin typing a name in the typelist
field, the list changes to narrow your choices. If you first select the typelist name from the list of typelists, you
can then use the code drop-down list to select the code.
When you set the properties for the non-LOB typelist, the Typelists editor changes the name of the node and
the errors go away.
Next steps
See also
• “Relationships between LOB typelists and other typelists” on page 566
• “Editing LOB typelists and typecodes” on page 568
Instead of removing a typecode, you can retire it or remove it from its parent.
See also
• “Retiring an LOB typecode” on page 572
• “Removing an LOB typecode from its parent” on page 572
Procedure
1. Navigate to configuration→config→Extensions→Typelist and double-click PolicyType.ttx.
2. In the Typelists editor, navigate to Commercial Auto→Children→PIP - Arkansas.
3. Right-click PIP - Arkansas, and then, in the drop-down menu, click Remove typecode from parent.
Result
The coverage is removed from Business Auto, but remains a coverage for Personal Auto. The coverage type
therefore still has a parent. It also continues to be a typecode in the CoverageType typelist.
Next steps
See also
• “Relationships among LOB typelists” on page 563
• “Retiring an LOB typecode” on page 572
Procedure
1. Navigate to configuration→config→Localizations→en_US.
2. Double-click typelist.properties.
Next steps
See also
• Globalization Guide
Procedure
1. Add the typecode to LossType typelist.
2. Add an LOBCode child typecode to the new typecode.
3. Update non-LOB typelists that reference LossType typecodes. These typelists include ClaimantType and
LossCause.
4. Create the supporting detail and list views in the ClaimCenter interface.
Next steps
See also
• “LOB typelists referenced by non-LOB typelists” on page 566
• “Editing an LOB typelist” on page 569
• “Adding a child LOB typecode” on page 570
Creating detail views and list views for a new loss type
You define both the detail views and panel sets in individual PCF files. Claim-related and policy-related screens in
ClaimCenter can then reference these files. The PCF files that you need to add are modal. With modal PCF files, the
screen file that references these pages calls the appropriate detail or list view based on the LossType typecode.
It is important that your PCF files follow a naming convention that includes the loss type code in the file name. Use
the following naming convention, replacing Code with the actual typecode:
FileName.Code
You must capitalize the first character of the included typecode. For example, a typecode of Cargo would have the
following corresponding file name:
NewClaimWizardLossDetailsDV.Cargo
Procedure
1. In the Project window, navigate to configuration→config→Page Configuration→pcf→claim.
2. Open the folder for each file in the following table to add the new file.
Next steps
See also
• “Relationships among LOB typelists” on page 563
• “Relationships between LOB typelists and other typelists” on page 566
• “Editing LOB typelists and typecodes” on page 568
Procedure
1. Add the new typecode to the ExposureType typelist.
2. Add a parent CoverageSubtype to the new ExposureType typecode.
3. Create the supporting detail views in the ClaimCenter interface.
Next steps
See also
• “Editing an LOB typelist” on page 569
• “Adding a child LOB typecode” on page 570
FileName.Code
You must capitalize the first character of the included typecode. For example, a typecode of CargoDamage would
have a corresponding file named:
ExposureDetailDV.Cargodamage
Procedure
1. In the Project window, navigate to configuration→config→Page Configuration→pcf→claim.
2. Open the folder for each file in the following table to add the new file.
Next steps
See also
• “LOB typelists” on page 562
• “Relationships among LOB typelists” on page 563
• “Relationships between LOB typelists and other typelists” on page 566
• “Editing LOB typelists and typecodes” on page 568
Configuring services
The Services feature in ClaimCenter enables the creation, submission, and management of service requests in
collaboration with selected vendors. ClaimCenter uses a contact management system like ContactManager to access
and select vendors specializing in specific services and a vendor portal like the Guidewire Vendor Portal to
communicate with vendors.
Note: In this topic and included examples, Guidewire ContactManager is used as the default contact management
system, and the Guidewire Vendor Portal is used as the default vendor communication portal. If you use non-
standard components to manage contacts and vendors, please ensure they are integrated appropriately with
Guidewire ClaimCenter before proceeding with adding and managing services.
See also
• Application Guide
• Guidewire Contact Management Guide
identical service trees in both applications. Use the data import feature in both ClaimCenter and Contact Manager to
load the same, customized service tree XML file.
The following diagram shows the structure of the vendor service tree:
Service
Category
Service
Subcategory
Service
Service
Service
Service
At the topmost level of the tree, the folder nodes represent either service categories or services. Under service
categories, you can define service subcategories or services. The leaf nodes of the tree represent the specialized
services grouped into each category.
The format of the vendorservicetree.xml file needs to conform to a corresponding structure. The following
example file defines Auto and Property categories, along with subcategories and services.
<?xml version="1.0"?>
<import>
<SpecialistService public-id="svc:aut">
<Active>true</Active>
<Code>auto</Code>
<Description>Auto</Description>
<Description_L10N_ARRAY/>
<Name>Auto</Name>
<Name_L10N_ARRAY/>
<Parent/>
</SpecialistService>
<SpecialistService public-id="svc:aut_ins">
<Active>true</Active>
<Code>autoinsprepair</Code>
<Description>Auto - Inspection / Repair</Description>
<Description_L10N_ARRAY/>
<Name>Inspection / Repair</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:aut"/>
</SpecialistService>
<SpecialistService public-id="svc:aut_ins_aud">
<Active>true</Active>
<Code>autoinsprepairaudio</Code>
<Description>Auto - Inspection / Repair - Audio equipment</Description>
<Description_L10N_ARRAY/>
<Name>Audio equipment</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:aut_ins"/>
</SpecialistService>
<SpecialistService public-id="svc:aut_ins_bod">
<Active>true</Active>
<Code>autoinsprepairbody</Code>
<Description>Auto - Inspection / Repair - Auto body</Description>
<Description_L10N_ARRAY/>
<Name>Auto body</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:aut_ins"/>
</SpecialistService>
<SpecialistService public-id="svc:pro">
<Active>true</Active>
<Code>prop</Code>
<Description>Property</Description>
<Description_L10N_ARRAY/>
<Name>Property</Name>
<Name_L10N_ARRAY/>
<Parent/>
</SpecialistService>
<SpecialistService public-id="svc:pro_ins">
<Active>true</Active>
<Code>propinspect</Code>
<Description>Property - Inspection</Description>
<Description_L10N_ARRAY/>
<Name>Inspection</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:pro"/>
</SpecialistService>
<SpecialistService public-id="svc:pro_ins_ind">
<Active>true</Active>
<Code>propinspectindependent</Code>
<Description>Property - Inspection - Independent appraisal</Description>
<Description_L10N_ARRAY/>
<Name>Independent appraisal</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:pro_ins"/>
</SpecialistService>
<SpecialistService public-id="svc:pro_con">
<Active>true</Active>
<Code>propconstrserv</Code>
<Description>Property - Construction services</Description>
<Description_L10N_ARRAY/>
<Name>Construction services</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:pro"/>
</SpecialistService>
<SpecialistService public-id="svc:pro_con_gen">
<Active>true</Active>
<Code>propconstrservgencontractor</Code>
<Description>Property - Construction services - General contractor</Description>
<Description_L10N_ARRAY/>
<Name>General contractor</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:pro_con"/>
</SpecialistService>
<SpecialistService public-id="svc:pro_con_car">
<Active>true</Active>
<Code>propconstrservcarpentry</Code>
<Description>Property - Construction services - Carpentry</Description>
<Description_L10N_ARRAY/>
<Name>Carpentry</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:pro_con"/>
</SpecialistService>
</import>
In this example, Auto is defined as a service category, Inspection/Repair is a subcategory, and Autobody a service type.
The services that can be performed by a vendor are configured in Guidewire ContactManager.
This vendor service tree example defines the following services:
Using this structure, you can customize the vendor service hierarchy as needed, based on your business needs. When
customizing the service tree, note the following:
• In the base configuration, services are organized into categories, subcategories, and service types in the user
interface. You can alter the names used in the application screens as well as the depth of the tree, which only has
three levels in the base configuration.
Note: If you change the depth of the vendor services tree, you must do so for both ClaimCenter and
ContactManager. Additionally, you must update PCF files in both applications to show additional columns to
match any new levels you add to the hierarchy.
• A leaf node can appear anywhere in the tree hierarchy, but each leaf node can have only one parent node. If a leaf
node must be associated with more than one parent node, duplicate it so that it has, at most, one parent in each
occurrence.
• The Code values in the vendor service tree used by the base ClaimCenter configuration are referenced in the
following class:
gw.vendormanagement.SpecialistServiceCodeConstants
Note: When you configure the vendor service tree, ensure that all Code values referenced from constants in this
class are present in your tree. If you remove constants from this class, search for and clean up references to those
constants from the base configuration to avoid compilation errors. As a best practice, if Gosu code or PCF files in
your configuration reference particular services in your tree, add and use the appropriate constants in this class.
See also
• “How to configure the depth of the service hierarchy” on page 586
<?xml version="1.0"?>
<import>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:23">
<Kind>quoteonly</Kind>
<Service public-id="svc:pro_ins_ind"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:29">
<Kind>quoteandservice</Kind>
<Service public-id="svc:aut_ins_bod"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:30">
<Kind>quoteonly</Kind>
<Service public-id="svc:aut_ins_bod"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:31">
<Kind>unmanaged</Kind>
<Service public-id="svc:aut_ins_bod"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:36">
<Kind>quoteandservice</Kind>
<Service public-id="svc:aut_ins_aud"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:37">
<Kind>quoteonly</Kind>
<Service public-id="svc:aut_ins_aud"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:75">
<Kind>quoteandservice</Kind>
<Service public-id="svc:pro_con_gen"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:76">
<Kind>quoteonly</Kind>
<Service public-id="svc:pro_con_gen"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:77">
<Kind>quoteandservice</Kind>
<Service public-id="svc:pro_con_car"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:78">
<Kind>quoteonly</Kind>
<Service public-id="svc:pro_con_car"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleIncidentType public-id="cc:1">
<IncidentType>Incident</IncidentType>
<Service public-id="svc:aut"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:2">
<IncidentType>Incident</IncidentType>
<Service public-id="svc:pro"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:8">
<IncidentType>MobilePropertyIncident</IncidentType>
<Service public-id="svc:aut"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:10">
<IncidentType>VehicleIncident</IncidentType>
<Service public-id="svc:aut"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:12">
<IncidentType>FixedPropertyIncident</IncidentType>
<Service public-id="svc:pro"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:15">
<IncidentType>PropertyIncident</IncidentType>
<Service public-id="svc:aut"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:16">
<IncidentType>PropertyIncident</IncidentType>
<Service public-id="svc:pro"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:20">
<IncidentType>OtherStructureIncident</IncidentType>
<Service public-id="svc:pro"/>
</SpecialistServiceCompatibleIncidentType>
<SpecialistServiceCompatibleIncidentType public-id="cc:23">
<IncidentType>DwellingIncident</IncidentType>
<Service public-id="svc:pro"/>
</SpecialistServiceCompatibleIncidentType>
</import>
The Service public-id value in this file must be set to the SpecialistService public-id from the vendor
service tree file. For example, an InjuryIncident type can be mapped to an Auto service and a quoteandservice
request type.
When customizing the vendorservicedetails, the following constraints apply:
• Every root SpecialistService (a service without a parent) must have at least one linked compatible incident
type.
• Every leaf SpecialistService (a service without any children) must have at least one linked compatible
ServiceRequestKind.
Add a service
IMPORTANT Use must use the same vendorservicetree.xml file for both ClaimCenter and ContactManager, to
ensure that both applications have identical vendor service directories.
Procedure
1. Customize the sample XML files to tailor them to your business requirements.
2. Import the vendorservicetree.xml file into ClaimCenter and ContactManager by using the Administration tab.
3. Import the vendorservicedetails.xml file only into ClaimCenter by using the Administration tab.
4. After data load completes, run the database consistency checks.
Next steps
See also
• Guidewire Contact Management Guide
• Installation Guide
• System Administration Guide
<SpecialistService public-id="svc:aut_adj">
<Active>false</Active>
<Code>autoadjudicate</Code>
<Description>Auto - Adjudicate claim</Description>
<Description_L10N_ARRAY/>
<Name>Adjudicate claim</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:aut"/>
</SpecialistService>
<SpecialistService public-id="auto_svc:1">
<Code>auto</Code>
<Description>Auto</Description>
<Description_L10N_ARRAY>
<SpecialistService_Description_L10N public-id="svc_trans:1">
<Language>es_ES</Language>
<Owner public-id="auto_svc:1"/>
<Value>Automotor</Value>
</SpecialistService_Description_L10N>
<SpecialistService_Description_L10N public-id="svc_trans:2">
<Language>de_DE</Language>
<Owner public-id="auto_svc:1"/>
<Value>Kraftfahrt</Value>
</SpecialistService_Description_L10N>
</Description_L10N_ARRAY>
<Name>Auto</Name>
<Name_L10N_ARRAY>
<SpecialistService_Name_L10N public-id="svc_trans:1">
<Language>es_ES</Language>
<Owner public-id="auto_svc:1" />
<Value>Automotor</Value>
</SpecialistService_Name_L10N>
<SpecialistService_Name_L10N public-id="svc_trans:2">
<Language>de_DE</Language>
<Owner public-id="auto_svc:1" />
<Value>Kraftfahrt</Value>
</SpecialistService_Name_L10N>
</Name_L10N_ARRAY>
</SpecialistService>
When the application opens, all display fields are in English. If the user chooses German as the language, the display
switches to German.
The three types of entities with public IDs that are defined in the example are SpecialistService,
SpecialistService_Description_L10N, and SpecialistService_Name_L10N. Each instance of each type of
entity must have a public-id value that is unique for that entity in the entire file. If any public ID matches that of
the corresponding entity type that is already in the database, the entity in the database is overwritten by the values in
the file.
More specifically:
• Each SpecialistService must have a public ID that is unique for all SpecialistService definitions.
• The example defines only two arrays of translated values, Description_L10N_ARRAY and Name_L10N_ARRAY.
However, in a real specialist service definition, there would be multiple L10N array definitions, a
Description_L10N_ARRAY and Name_L10N_ARRAY for each service. Inside these array definitions:
◦ Each SpecialistService_Description_L10N definition must have a public ID that is unique for all
SpecialistService_Description_L10N definitions across the entire file.
◦ Each SpecialistService_Name_L10N definition must have a public ID that is unique for all
SpecialistService_Name_L10N definitions across the entire file.
Additionally, in its Owner element, each L10N entity must refer to the public ID of the SpecialistService entity
containing it, which is the entity that the L10N entity translates. In the previous example, the Owner element of each
L10N entity is set to auto_svc:1, which is the public-id of the Auto SpecialistService entity.
See also
• Globalization Guide
ClaimCenter is to display the two new services as Quote and Perform Service types supporting the complete service
request lifecycle—obtain quotes, request service, and make payments. Therefore they are defined in
vendorservicedetails.xml as <Kind>quoteandservice</Kind>.
Additionally, you must add a column for the new service subtype to two PCF files in ClaimCenter and one PCF file
in ContactManager.
See also
• For the sample vendor service tree extended in this topic, see “Vendor service tree” on page 579.
• For the sample vendor service details extended in this topic, see “Vendor service details” on page 582.
Procedure
1. In ClaimCenter Studio, navigate in the Project window to configuration→config→sampledata, and then double-
click vendorservicetree.xml to open it in the editor.
2. Add the two new service definitions after the definition for the service named Audio equipment:
...
<SpecialistService public-id="svc:aut_ins_aud">
<Active>true</Active>
<Code>autoinsprepairaudio</Code>
<Description>Auto - Inspection / Repair - Audio equipment</Description>
<Description_L10N_ARRAY/>
<Name>Audio equipment</Name>
<Name_L10N_ARRAY/>
<Parent public-id="svc:aut_ins"/>
</SpecialistService>
<SpecialistService public-id="svc:aut_ins_aud_n">
<Active>true</Active>
<Code>autoinsprepairaudionew</Code>
...
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:81">
<Kind>quoteandservice</Kind>
<Service public-id="svc:aut_ins_aud_n"/>
</SpecialistServiceCompatibleServiceRequestKind>
<SpecialistServiceCompatibleServiceRequestKind public-id="cc:82">
<Kind>quoteandservice</Kind>
<Service public-id="svc:aut_ins_aud_u"/>
</SpecialistServiceCompatibleServiceRequestKind>
...
Note: Each public-id value must be unique. If you have previously added other entries to this file, you
might have to use different values for public-id than the ones used in the sample code.
5. Import vendorservicetree.xml and vendorservicedetails.xml into ClaimCenter by logging in and then
navigating to Administration→Utilities→Import.
6. In ClaimCenter Studio, in the Project window, navigate to configuration→config→Page
Configuration→pcf→claim→servicerequests and double-click InstructionServicesLV_default to open it in
the editor.
7. In the RowIterator widget named InstructionServicesIterator, add a new column to display the
additional level in the service tree:
a. Copy the cell under the label Service Type, which has the value
instructionService.getEditHelper(2).Value.
b. Paste this cell to the right of the Service Type column.
This new cell will become the Service Subtype column. The error indicators will go away when you make
the next changes.
c. Click the new cell and change the id property to:
InstructionServiceType3
instructionService.getEditHelper(3).Value
e. In that same cell, select the value of label property, which is a display key.
f. Right-click and choose GoTo→Declaration.
In the base configuration, the display.properties file in Localizations en_US opens and has a tab named
Localizations.
g. Add the following new display key to the file that opens:
h. In the InstructionServicesLV_default PCF file, in the new cell, enter this new display key as the
value for the label property:
displaykey.Web.ServiceRequest.ServiceToPerform.ServiceSubType_Ext
ServiceType3
service.getEditHelper(3).Value
e. In that same cell, change the value of label property to the following display key:
displaykey.Web.ServiceRequest.ServiceToPerform.ServiceSubType_Ext
IMPORTANT This series of steps changes the Audioequipment service from a service type into an intermediate node
in the tree, a parent node of the Service Subtype node. If you previously assigned the Audioequipment service to any
contacts, importing vendorservicetree.xml will cause errors that you need to correct.
Procedure
1. Log in to ContactManager and navigate to Administration→Utilities→Import.
2. Import the copy of vendorservicetree.xml that you modified in the previous series of steps.
3. In ContactManager Studio, in the Project window, navigate to
configuration→config→Page→Configuration→pcf→contacts. Then double-click VendorServicesLV to open it in
the editor.
4. In the RowIterator widget, add a new column to display the additional level in the service tree, as follows:
a. Copy the cell under the label Service Type, which has the value serviceRow.getServiceNamePart(2).
b. Paste this cell to the right of the Service Type column.
This new cell will become the Service Subtype column. The error indicators will go away when you make
the next changes.
c. Click the new cell to select it, and then change the id property to:
ServiceNameCell3
serviceRow.getServiceNamePart(3)
e. In that same cell, select the value of label property, which is a display key.
f. Right-click and choose GoTo→Declaration.
In the base configuration of ContactManager, the display.properties file in Localizations en_US opens
with a tab named Localizations.
g. Add the following new display key to the file that opens:
h. In the PCF file, click the new cell, and then enter this new display key as the value for the label property,
as follows:
displaykey.Web.ContactDetail.Services.ServiceSubtype_Ext
Next steps
See also
• Guidewire Contact Management Guide
DocumentLinks
ServiceRequestMetric Exposure Claim
0..*
ServiceRequest
ServiceRequestChange ServiceRequestDocumentLink
0..*
1 1 ServiceRequest ServiceRequest
Service Request Sequence Document
Metrics Timestamp VisibleToSpecialist
ServiceRequestMessage History Description DateSpecialistNotified
Initiator StatementDocumentLinks
SentFromPortal Messages 1..*
RelatedStatement 0..* 0..*
0..*
1 1 0..* 0..* 1 1 0..*
Service Request
Document
ServiceRequest Document Links
<<join>>
LatestQuote
Related
Quotes 1
ServiceRequestInstruction Statement
DocumentLinks
Document
Services InstructionHistory/ ServiceRequestNumber
1..* Instruction 1 Specialist ServiceRequestDocumentLinks
ServiceRequest
InstructionText Progress 0..1 0..*
CustomerContact QuoteStatus ServiceRequestStatement
ServiceAddress InstructionHistory
Notes ServiceRequest ServiceRequest
1 Activities StatementDocumentLinks StatementLineItem
Service
1 0..*
ReferenceNumber
<<join>> Activity 0..* 0..1 OriginatingServiceRequest Description
Invoices ApprovalDate Category
1..*
Kind ApprovedBy Amount
SpecialistService 0..1 Messages StatementCreationTime
ReferenceNumber DeclinedReason
Name
Description
History Check
0..*
Code 0..* 1 1 ServiceRequestInvoice
Note
CompatibleIncidentTypes
CompatibleKinds Quotes/
LatestQuote
0..1
1 ServiceRequestInvoice
ServiceRequestQuote
Contact Status Check
Legend
<<vendor>> ExpectedDaysToPerform PaidBy
A
0..n
B A has 0 or more Bs 0..* Service Check
PaymentDate
A B A is a subtype of B 0..*
Invoices 0..*
Entity Description
ServiceRequest The core service request entity.
ServiceRequestInstruction All instructions that have been created for this service request, including those that are no
longer active. The ServiceRequest entity points to the latest instruction.
ServiceRequestStatement An estimation, such as a quote or invoice, received from a vendor.
ServiceRequestQuote Quotes received from a vendor for the service request. The ServiceRequest entity points to
the latest version of the quote. ServiceRequest has an array of quotes only to keep a record
of past quotes. ServiceRequest.LatestQuote is the only one considered to be in effect at a
given time. This means the current quote is always expected to cover all the activity included
in the service request.
ServiceRequestInvoice Invoices associated with the service request.
ServiceRequestDocumentLink Associates the service request to a document.
ServiceRequestChange All changes that have been applied to this service request. These make up its history.
SpecialistService A node, signifying a service type, in the vendor service tree.
ServiceRequestMetric Metrics related to the service request.
ServiceRequestMessage Messages for the service request.
Quote only
The following diagram displays the various stages in the lifecycle of a quote-only service request.
Quote
(Adjuster)
No Quote
Create service request
Draft
(Adjuster)
Submit request
No Quote Waiting for Quote
(Vendor)
Decline work
Declined Requested
(Vendor)
Waiting for Quote Accept work
(Vendor)
Cancel work
In Progress (Vendor)
Add quote
(Adjuster) (Vendor)
Request requote Add quote
(Vendor) Legend
Note: The service request state names are derived from the ServiceRequestProgress typelist.
Legend
(Adjuster) Service Request State
No Quote
Create Service Request
Draft Quote Status
Action
(Vendor)
Waiting for Quote/ Accept work
Approved Waiting for Approval
(Vendor)
(Vendor) Add quote
Cancel work
In Progress Vendor Waiting
(Adjuster)
Approve quote
(Adjuster)
Approved (Vendor) Request requote
(Vendor) (Adjuster)
Revise quote
Finish the work Waiting for Approval/
Approve invoice
Vendor Waiting Approved
Approved
Service only
The following diagram displays the various stages in the lifecycle of a service-only request.
Service Only
(Adjuster)
Create service request
Draft
(Adjuster)
Submit request
(Vendor)
Decline work
Declined Requested
(Vendor)
Agree to perform service
(Vendor)
Cancel work
In Progress Vendor Waiting
(Vendor)
Resume work
(Vendor) (Adjuster)
Finish the work Approve invoice
Legend
Unmanaged service
Unmanaged services are specialized service request types created only as part of the Auto First and Final wizard.
This service request type does not have associated quotes, and you can directly proceed to add invoices and make
payments once the wizard is complete.
The following diagram illustrates the lifecycle of an unmanaged service request.
Unmanaged Service
(Adjuster)
Create Service Request
Work Complete
(Vendor)
Add invoice
(Adjuster)
Pay invoice
Legend
Invoice Status
Action
Procedure
1. Start Guidewire Studio.
2. Navigate to configuration→config→Rule Sets→Postsetup→ClaimPostsetup.
3. Right-click ClaimPost-setup and click NewRule.
4. In the Rulename field, enter a name for the new rule, such as CPS02000 - Add Service Request for Vehicle
Incident.
5. Add the following rule:
CONDITION(claim : entity.Claim):
return claim.LossType == TC_AUTO
and claim.VehicleIncidentsOnly.HasElements
// Create a new service request for a newly submitted auto claim with one or more vehicle incidents.
for (incident in claim.VehicleIncidentsOnly) {
var serviceRequest = incident.Claim.newServiceRequest(incident.Claim.maincontact, incident)
serviceRequest.Instruction.addServiceFoundByCode(SpecialistServiceCodeConstants.AUTOBODYREPAIR)
serviceRequest.Kind = ServiceRequestKind.TC_QUOTEANDSERVICE
// Specify the vendor. In practice, this contact would be retrieved from the address book.
serviceRequest.Specialist = new CompanyVendorBuilder().withCompanyName("Anya’s Auto Repair").create()
serviceRequest.finishSetup()
}
Result
Whenever you click Submit to submit the claim, ClaimCenter now shows the corresponding service requests
automatically, as seen in the example below.
Next steps
See also
• Application Guide
In the base configuration, two versions of the recordChange method are included, as follows:
• public ServiceRequestChange recordChange(String description, ServiceRequestOperation
operation, ServiceRequestStatement statement, Contact initiator)
• public void recordChange(ServiceRequestChange newChange)
Only the first version, which returns a ServiceRequestChange object, is used in the base configuration. This
version of the method takes a description of the change, an optional reference to a ServiceRequestStatement, and
a Contact, typically the initiator of the change. It then creates a ServiceRequestChange object, capturing changes
to some ServiceRequest fields automatically.
The value for a ServiceRequest field is captured and stored on ServiceRequestChange. The following conditions
must be met in the data model:
• The ServiceRequestChange entity contains fields with the same names as the ServiceRequest entity, but with
additional prefixes (New_) or suffixes (_Chg).
• A New_ field is nullable and has the same type as the corresponding ServiceRequest field.
• A _Chg field is not nullable and is of the type, bit.
The first version of recordChange determines whether the value of the field on ServiceRequest has changed since
the last time recordChange was called. It determines this by stepping backwards through ServiceRequestChange
objects using the Sequence field to determine order. It then stores the result, true if the value has changed, false
otherwise, in the _Chg field on the new ServiceRequestChange object it creates. If the value has changed, it then
stores the new value of the field in the New_ field.or otherwise leaves it as null.
The second version of recordChange, which is not used in the base configuration, does not perform the automatic
populating of fields based on the ServiceRequest state. Instead, it expects the caller to create and populate the
ServiceReqeustChange object as desired.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
2. Navigate to configuration→config→Extensions→Entity.
3. Right-click and select New→Entity. Enter the following values:
Name Value
Entity TestMoneySRMetric
Final No
4. The TestMoneySRMetric entity editor is now shown. Click the plus icon ( ), and select implementsInterface
from the drop-down choice list.
Enter the following values:
Name Value
iface gw.api.metric.MetricMethods
<?xml version="1.0"?>
<subtype
xmlns="http://guidewire.com/datamodel"
desc="Custom money metric for service requests."
entity="TestMoneySRMetric"
supertype="MoneyServiceRequestMetric">
<implementsInterface
iface="gw.api.metric.MetricMethods"
impl="gw.vendormanagement.metric.TestMoneyServiceRequestMetricMethodsImpl"/>
</subtype>
Next steps
Continue to “Step 2. Add the new metric to the implementation classes” on page 598.
Procedure
1. Navigate to configuration→config→gsrc→gw→vendormanagement→metric, right-click and select
New→GosuClass.
2. Enter the following values:
Name Value
Name TestMoneyServiceRequestMetricMethodsImpl
Kind Class
Click OK.
3. Edit the new class, TestMoneyServiceRequestMetricMethodsImpl.gs, that extends the
MoneyServiceRequestMetricMethodsImpl class, for example.
package gw.vendormanagement.metric
uses gw.api.vendormanagement.metric.MoneyServiceRequestMetricMethodsImpl
uses gw.api.metric.MetricUpdateHelper
uses java.util.Date
Next steps
Continue to “Step 3. Test the changes” on page 598.
Procedure
1. Shut down ClaimCenter if it is running, and then restart it.
2. Log into ClaimCenter as a user with the appropriate permissions to view and edit claims.
For example, log in as user aapplegate with password gw.
3. Open an existing claim with service requests.
4. Select Services from the sidebar.
Result
The new metric, TestMoneyServiceRequestMetric, is now visible in the Metrics section of the Services screen.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
2. Navigate to configuration→config→sampledata.
3. Copy servicerequestmetriclimits.xml to your local repository and modify it as needed.
The following excerpt is an example of the limits data included in the base configuration of ClaimCenter.
<?xml version="1.0"?>
<import xmlns="http://guidewire.com/cc/exim/import" version="p5.55.a10.159.174">
<ServiceRequestMetricLimit public-id="cc:1">
<Currency/>
<CustomerServiceTier/>
<DecimalRedValue>16.0000</DecimalRedValue>
<DecimalTargetValue>8.0000</DecimalTargetValue>
<DecimalYellowValue>8.0000</DecimalYellowValue>
<LimitType>nooffset</LimitType>
<MetricUnit>hours</MetricUnit>
<ServiceCategory public-id="svc:aut"/>
<ServiceRequestMetricType>
SpecialistInitialResponseTimeServiceRequestMetric
</ServiceRequestMetricType>
<ServiceRequestTier/>
<SpecialistService/>
</ServiceRequestMetricLimit>
<ServiceRequestMetricLimit public-id="cc:2">
<Currency/>
<CustomerServiceTier>platinum</CustomerServiceTier>
<DecimalRedValue>8.0000</DecimalRedValue>
<DecimalTargetValue>4.0000</DecimalTargetValue>
<DecimalYellowValue>4.0000</DecimalYellowValue>
<LimitType>nooffset</LimitType>
<MetricUnit>hours</MetricUnit>
<ServiceCategory public-id="svc:aut"/>
<ServiceRequestMetricType>
SpecialistInitialResponseTimeServiceRequestMetric
</ServiceRequestMetricType>
<ServiceRequestTier/>
<SpecialistService/>
</ServiceRequestMetricLimit>
<ServiceRequestMetricLimit public-id="cc:3">
<Currency/>
<CustomerServiceTier/>
<DecimalRedValue>5.0000</DecimalRedValue>
<DecimalTargetValue>2.0000</DecimalTargetValue>
<DecimalYellowValue>2.0000</DecimalYellowValue>
<LimitType>nooffset</LimitType>
<MetricUnit>days</MetricUnit>
<ServiceCategory public-id="svc:pro"/>
<ServiceRequestMetricType>
SpecialistInitialResponseTimeServiceRequestMetric
</ServiceRequestMetricType>
<ServiceRequestTier/>
<SpecialistService/>
</ServiceRequestMetricLimit>
4. Import the updated servicerequestmetriclimits.xml file into ClaimCenter by clicking the Administration
tab and navigating to Utilities→Import Data.
Next steps
After you import the service request limit XML data into the application, you cannot edit it by using the application
user interface. Instead, edit the corresponding XML file, as needed, and import it back into ClaimCenter.
See also
• Guidewire Contact Management Guide
• Installation Guide
• Application Guide
This topic discusses how to implement the ClaimCenter 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, ClaimCenter 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
configuration, ClaimCenter 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.
Object Function
Note: Array properties such as claim.Activities, do not allow de-referencing. For example,
ClaimCenter does not allow claim.Activities[0]. However, ClaimCenter does permit array
properties such as claim.Activities.Count.
RuleActionExtensions Provides a mechanism to set extension fields on entities that ClaimCenter creates through rule
actions. ClaimCenter sets the entity fields after it completes performing all core rule actions. It is
not possible to modify the default core rule actions.
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
configuration, ClaimCenter 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.
_blackListedProperties.add(Claim#Access)
Util.xxxx()
Gosu class ActivityRulesUtility, in package gw.bizrules, defines the available custom functions. In the base
configuration, this class contains such functions as currentDate and getSIActivityThreshold.
Configuring methods and properties for business rule conditions 603
Configuration Guide 9.0.5
To add new functions to this class, use the existing functions as examples of how to define a new function.
The following example illustrates how to add a new function to convert currencies from within the business Rules
screen.
In ActivityRulesUtility:
Rule Description
Context ClaimCenter uses the rule context definition to define the symbol table that provides the list of symbols
definition available in the business rules editor while creating or editing a rule during rule development.
Context ClaimCenter 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 matter context definition to an activity
rule” on page 604.
Procedure
1. Open ClaimCenter Studio.
2. Add the following typecode to the RuleContextDefinitionKey typelist extension. If this typelist extension
does not exist, create it.
Code Matter
Name Matter
3. In the Studio Project window, navigate to gsrc→gw→bizrules and create a package under bizrules to hold your
work.
4. Add a new enum parameter name class for matter in your work package. Name it
ActivityRulesContextParameterNameExtension and populate it with the following text.
package ...
enum ActivityRulesContextParameterNameExtension {
matter
}
package ...
uses gw.bizrules.ruleaction.config.AbstractCommandParameterSet
6. Enhance the BaseCommandParameterConfig class to create a new Matter command parameter. Name the
enhancement BaseCommandParameterConfigEnhancement and populate it with the following text.
package ...
uses gw.bizrules.ruleaction.config.AbstractCommandParameterSet
uses gw.bizrules.ruleaction.config.BaseCommandParameterConfig
uses gw.bizrules.ruleaction.config.CCCommandParameterDefinition
uses gw.bizrules.ruleaction.config.CCCommandParameterUIConfigBuilder
package ...
uses gw.bizrules.context.ActivityRulesContextParameterName
uses gw.bizrules.context.ClaimApplicabilityCriteriaPredicate
uses gw.bizrules.context.RuleContextBuilder
uses gw.bizrules.IRuleContext
uses gw.bizrules.ITriggeringPoint
uses gw.plugin.bizrules.ICCBizRulesPlugin
uses gw.plugin.Plugins
/**
* Context Objects
*/
private var _claim : Claim
private var _matter : Matter
In your implementation of a TriggeringPoint class, you control the number and type of symbols to add.
With that said, Guidewire recommends (but does not require) that you always include a Claim symbol in your
list of context symbols. Remember that whatever context symbols you add to your TriggeringPoint class
you must also add to the list of context definitions in class CCBizRulesPlugin.
8. Create a Gosu Matter Preupdate rule to trigger execution of the MatterTriggeringPoint class.
As ClaimCenter triggers all business rules off of Gosu rules, you need to add a Gosu rule that references your
MatterTriggeringPoint class. Updating a matter in ClaimCenter triggers the Matter Preupdate rule, which
then passes the specific matter for update to class MatterTriggeringPoint.
USES:
uses gw.bizrules.context.MatterTriggeringPoint
END
9. Add entries for the matter-related display keys that you need to the display.properties file appropriate for
your locale.
package ...
uses com.google.common.base.Preconditions
uses gw.api.locale.DisplayKey
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.ActivityAssignee
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.BaseActivityAssigneeLoader
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.UserBasedActivityAssignee
uses gw.bizrules.ruleaction.generateactivity.config.GenerateActivityCommandParameterSet
/**
* Behavioral Command Parameter Value loads a UserBasedActivityAssignee to assign
* the activity to the matter owner
*/
class MatterOwnerActivityAssigneeLoader extends BaseActivityAssigneeLoader {
/**
* Name of the Behavioral Command Parameter Value
*/
public final static var NAME : String = "Matter_Owner"
/**
* Singleton Instance
*/
public static var INSTANCE : MatterOwnerActivityAssigneeLoader =
new MatterOwnerActivityAssigneeLoader()
public construct() {
_name = NAME
_uidisplay = DisplayKey.get( "Web.ActivityRules.Action.GenerateActivity.Assignee.MatterOwner")
_directlyAssignable = true
_additionalInfoMode = null
}
package ...
uses com.google.common.base.Preconditions
uses gw.api.locale.DisplayKey
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.ActivityAssignee
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.BaseActivityAssigneeLoader
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.UserBasedActivityAssignee
uses gw.bizrules.ruleaction.generateactivity.config.GenerateActivityCommandParameterSet
/**
* Behavioral Command Parameter Value loads a UserBasedActivityAssignee to assign
* the activity to the matter creator
*/
class MatterCreatorActivityAssigneeLoader extends BaseActivityAssigneeLoader {
/**
* Name of the Behavioral Command Parameter Value
*/
public final static var NAME : String = "Matter_Creator"
/**
* Singleton Instance
*/
public static var INSTANCE : MatterCreatorActivityAssigneeLoader =
new MatterCreatorActivityAssigneeLoader()
public construct() {
_name = NAME
_uidisplay = DisplayKey.get( "Web.ActivityRules.Action.GenerateActivity.Assignee.MatterCreator")
_directlyAssignable = true
_additionalInfoMode = null
}
package ...
uses gw.api.locale.DisplayKey
uses gw.bizrules.ruleaction.behavioralcommandparam.activityrestriction.BaseActivityRestriction
uses gw.bizrules.ruleaction.behavioralcommandparam.assignee.ActivityAssignee
uses gw.bizrules.ruleaction.generateactivity.config.GenerateActivityCommandParameterSet
uses entity.Activity
/**
* Behavioral Command Parameter Value describes the ActivityRestriction where no duplicate activity
* should be generated for matter
*/
class DuplicateMatterActivityRestriction extends BaseActivityRestriction {
/**
* Name of the Behavioral Command Parameter Value
*/
public final static var NAME : String = "Duplicate_Activity_Matter"
/**
* Singleton Instance
*/
public static var INSTANCE : DuplicateMatterActivityRestriction =
new DuplicateMatterActivityRestriction()
construct() {
_name = NAME
_uidisplay = DisplayKey.get( "Web.ActivityRules.Action.GenerateActivity.Restriction.Matter")
}
13. Add an entry for the new matter context to class ActivityAssigneeDefaultValueHandler (in package
gw.bizrules.ruleaction.defaultvaluehandler).
a. Find the if statement in the class that starts with the following text:
if ( ruleContextKey == RuleContextDefinitionKey.TC_EXPOSURE...
b. Add a new else if statement at the end of the if statement for the new matter context definition that is
similar to the existing context definitions.
For example, add the following to the end of the if statement:
14. Add an entry for the new matter context to class ActivityRestrictionDefaultValueHandler (in package
gw.bizrules.ruleaction.defaultvaluehandler).
a. Find the if statement in the class that starts with the following text:
if (ruleContextKey == RuleContextDefinitionKey.TC_EXPOSURE
b. Add the following line to towards the end of the if statement, directly above the null statement.
|| ruleContextKey == RuleContextDefinitionKey.TC_MATTER
c. Search for the restrictList code and add the following restriction in an appropriate place:
restrictsList.add(DuplicateMatterActivityRestriction.INSTANCE)
15. Add an entry for the new matter context to class RelatedToDefaultValueHandler (in package
gw.bizrules.ruleaction.defaultvaluehandler).
a. Find the last line of the code that defines the _defaultRelatedToMap parameter (before the closing curly
brace) and add a comma at the end of the line.
b. Add a RuleContextDefinitionKey similar to the others for the new Matter context directly under that
line.
For example:
RuleContextDefinitionKey.TC_MATTER->MatterRelatedTo.INSTANCE
16. Add a new method for the new matter context parameter to the ActivityRuleCommandDefinitionBuilder
class.
For example, add something similar to the following text to this class.
function withMatterContextParameter() : B {
addToMap( Config.MATTER, ExpressionFragmentBuilders.forCodeExpression("matter") )
return this as B
}
17. Create a new MatterRelatedTo class that is similar to the ClaimRelatedTo class.
For example, create something similar to the following class.
package ...
uses gw.api.locale.DisplayKey
uses gw.bizrules.ruleaction.behavioralcommandparam.relatedto.BaseActivityRulesRelatedTo
uses gw.bizrules.ruleaction.config.AbstractCommandParameterSet
uses gw.bizrules.ruleaction.generatehistoryevent.config.GenerateHistoryEventCommandParameterSet
uses gw.pl.persistence.core.Bean
/**
* Behavioral Command Parameter Value describes the ActivityRulesRelatedTo where the activity
* is related to Matter
*/
class MatterRelatedTo extends BaseActivityRulesRelatedTo {
/**
* Name of the Behavioral Command Parameter Value
*/
public final static var NAME : String = "Matter"
/**
* Singleton Instance
*/
public static var INSTANCE : MatterRelatedTo = new MatterRelatedTo()
construct() {
_name = NAME
_uidisplay = DisplayKey.get( "Web.ActivityRules.Action.RelatedTo.Matter")
}
18. Open class CCBizRulesPlugin (in package gw.bizrules) and add entries for the new matter context and the
supporting classes that you created.
a. Find the list of context definition variables and add the Matter context to the end of the list.
For example:
_triggeringPoints.put(TriggeringPointKey.TC_UPDATE, {claimCD,exposureCD,expoIterCD,checksetIterCD,
recoverysetIterCD,reservesetIterCD,recoveryreservesetIterCD,subroIterCD,matterCD}
.toTypedArray())
c. Search for the line that begins with override property get
BehavioralCommandParameterExtensions() and enter your class names as the comments indicate.
For example, enter something similar to the following in this class.
ActivityAssigneeLoader->new BehavioralCommandParameterExtension<ActivityAssigneeLoader>() {
ActivityRulesRelatedTo->new BehavioralCommandParameterExtension<ActivityRulesRelatedTo>() {
override function registerBehavioralCommandParameterValues(list: List<ActivityRulesRelatedTo>) {
// Add any new ActivityRulesRelatedTos to this list to be registered
// in class ActivityRulesRelatedToFactory
list.add(MatterRelatedTo.INSTANCE)
}
},
ActivityRestriction->new BehavioralCommandParameterExtension<ActivityRestriction>() {
override function registerBehavioralCommandParameterValues(list: List<ActivityRestriction>) {
// Add any new ActivityRestrictions to this list to be registered
// in class ActivityRestrictionFactory
list.add(DuplicateMatterActivityRestriction.INSTANCE)
}
}
}
}
19. Regenerate and recompile the Java class that backs the RuleContextDefinitionKey typelist.
a. Save all your work.
b. Select Generate Metadata Classes from the Studio Codegen menu.
This action regenerates class RuleContextDefinitionKey.java, adding the new matter typekey to the
class.
c. Select Make Project from the Studio Build menu.
This action recompiles the newly regenerated RuleContextDefinitionKey class. This action is necessary
in order for the Gosu compiler to see the new typekey as it recompiles class CCBizRulesPlugin and other
classes.
20. If using an application server other than the default Quickstart server, create and deploy a WAR or EAR file as
necessary.
21. To test your work, create a new Activity business rule in ClaimCenter and verify that you can see and chose
the matter context.
your new context still uses Claim as the initial data when business rules are triggered, then you need only to update
the existing ClaimTriggeringPoint implementation:
• Add your new context to the list of existing supported contexts (in static variable SUPPORTED_CONTEXTS).
• Add your new context as a new case statement in method generateContexts.
However, if you are adding a new rule context that is not a base configuration context, then you need to do the
following:
• Create a new TriggeringPoint implementation for that object type.
• Add a Gosu rule to trigger business rules execution using your new TriggeringPoint class. (As ClaimCenter
triggers the business rules off of Gosu rules, you need to add a Gosu rule for that purpose.)
Single-value The business rule data model stores single applicability values as a property on the ActivityRule entity type. To
rule criteria use a single-value criterion, add properties for single values to the ActivityRule 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 to
rule criteria the ActivityRule entity type. These linked entities need to implement the RuleVersionDependent interface.
Implementing this interface ensures that ClaimCenter imports and exports these entity properties as part of the
rule.
See also
• Application Guide
Procedure
1. Create a new data entity type for your applicability criterion.
Use the existing applicability criteria entity types as examples:
• AppCritLineLossType
• AppCritPolicyType
• AppCritJurisdiction
Use the same naming conventions as the existing examples.
2. Add the applicability criterion to the ActivityRule entity type as an array of the entity type that you created
in the previous step.
Use an existing array definition as an example.
3. Extend class ClaimApplicabilityCriteriaPredicate and override the default behavior of the test method
to add, modify, or remove filtering restrictions.
4. Create new ITriggeringPoint implementation classes that use the Predicate class that you created in the
previous step.
5. Update PCF ActivityRulePanelSet to include the new input sets in the ApplicabilityCriteria pane.
The PCF ApplicabilityCriteria pane shows as the Applies To section of the business rule definition screen.
6. (Optional) Update PCF ActivityRules so that the list view shows a column for the new applicability
criterion.
7. (Optional) Update Gosu class ActivityRuleFilterCriteria and the associated
ActivityRuleFilterCriteriaDV PCF to improve the search filtering view on the Activity Rules screen.
You access the search functionality of the ActivityRuleFilterCriteriaDV PCF pane by clicking Show Filters
on the Activity Rules screen.
Configuring deductibles
This topic explains how deductibles are structured, and how they interact with checks.
See also
• Application Guide
Deductible
Amount
Paid Coverage
Waived 0..1 1
Overridden Deductible
EditReason
Coverage
Claim
Currency
1
Exposure
Coverage
0..n
TransactionLineItem
TransactionAmount
ReservingAmount Payment
ClaimAmount Exposure
ReportingAmount Check
Transaction
Deductible
Legend
A B A relates to B and
0..n vice-versa
A B A has a one-to-many
relationship with B
A B A is a subtype of B
Field Description
Amount The amount that this deductible represents. This amount is specified in the claim currency.
Paid Specifies whether this deductible has already been paid. This is initially false, and is set to true when a payment
is created and a deductible applied to it.
Waived Specifies whether this deductible has been waived. This value, initially false, can be set to true on the Exposure
Edit page if the deductible has not been paid yet. If set to true, the check wizard does not allow this deductible
to be applied to payments. In the database, however, a value of true indicates that the amount has been
modified.
Overridden Specifies whether this deductible has been overridden and is initially set to false. If set to true, the amount
field can be modified in the user interface.
EditReason Specifies the reason why this deductible was waived or overridden.
Coverage Foreign key link to the coverage for which this deductible was calculated. This field is nullable in the database to
support policy-level deductibles, but the base configuration does not support a null coverage field.
Claim Foreign key link to the claim for this deductible.
Currency Specifies the deductible’s coverage’s currency.
There is a one-to-at-most-one relationship from Coverage to Deductible, and a method on Coverage to access the
Deductible pointing to it, if any. TransactionLineItem has a foreign key to Deductible. A deductible can be paid
over any number of TransactionLineItems, although in the base configuration, ClaimCenter supports only paying
a deductible over one TransactionLineItem.
RecodePayment.pcf. The doRecode method calls OriginalPayment.unlinkDeductible after the onset payment
has been created, but before calling gw.api.financials.FinancialsUtil.recodePayment.
For the onset payment, if the target exposure has a valid deductible, the target exposure's deductible is applied to the
onset payment. Otherwise, no deductible is applied, and the onset payment's deductible line item instead become
Former Deductible. These actions are performed in the doRecode method in RecodePayment.pcf. The doRecode
method calls FirstOnsetPayment.linkDeductible before calling
gw.api.financials.FinancialsUtil.recodePayment.
See also
• “Transferring checks and deductibles” on page 617
Cloning checks
Cloning checks does not affect deductibles because cloning does not copy the deductible or former deductible line
items. For example, the CloneCheckWizard.pcf file calls
gw.api.financials.NormalCreateCheckWizardInfo.setupCheckWizardInfo in the first step. The
setupCheckWizardInfo method does not copy deductions, offset payments, or recoded payments. ClaimCenter
alerts you to this behavior when it occurs.
See the Rules Guide for more information on the pre-update rules.
The weighted workload feature enables the efficient balancing of assignable objects, such as claims or exposures,
across users and user groups. Weighted workload balancing happens, for the most part, in the background and uses
configurable elements such as conditions and calculated weights to estimate the amount of effort required.
A workload-aware assignable has the appropriate infrastructure and configuration to interact with weighted
workload assignment.
This topic describes the configuration of weighted workload balancing and includes:
See also
• Application Guide
WeightedAssignmentEnabled
Guidewire does not enable weighted workload balancing in the base configuration. The configuration parameter,
WeightedAssignmentEnabled, enables or disables weighted workload assignment in ClaimCenter.
Setting WeightedAssignmentEnabled to false disables automatic calculation and updating of the weights of all
assignable objects and the calculation of total workloads for users.
WeightedAssignmentGlobalDefaultWeight
Configuration parameter WeightedAssignmentGlobalDefaultWeight defines the default weight for all workload-
enabled, assignable objects. In the base configuration, Guidewire sets this value to 10 and applies it to all open
claims and exposures that do not match any existing workload classifications. This value must be a non-negative
integer. You can also alter the default weight of specific sets of assignable objects.
IMPORTANT Default workload weight changes have system-wide impact and must be made infrequently. If you
change this value, you need to run the UserWorkloadUpdate worker queue to recalculate stored entity workload
weights.
See also
• “Configuring the default weight in code” on page 628
• System Administration Guide
Procedure
1. Start Guidewire Studio:
a. Open a command prompt and navigate to the ClaimCenter installation directory.
b. Enter the following command:
gwb studio
2. In the Studio Project window, navigate to the following location and double-click config.xml to open it:
configuration→config
3. Find configuration parameter WeightedAssignmentEnabled and set its value to true.
4. Save your changes.
In the base configuration, adjusters and claim supervisors do not have these permissions. The Super User has all
permissions, and the Manager role is given permissions to view and edit supplemental weights only.
Assignable weights are recalculated only if significant changes occur that might affect the workload. These events
also trigger user workload recalculation.
These events include:
• Creation of an assignable object, such as new claim creation through the FNOL wizard.
• Reassignment.
• State changes, such as the closing or reopening of a claim.
• Modification of attributes that affect workload.
Whenever one of these events occurs, it triggers immediate recalculation of the assignable object's weight.
ClaimCenter then stores this weight on the assignable's WorkloadWeight attribute.
The following section details the attribute changes that trigger recalculation.
Claim
The following fields, if modified, trigger workload recalculation on Claim objects:
• LOBCode
• LossCause
• Segment
• SupplementalWorkloadWeight
Adding or deleting exposures from a claim triggers recalculation of workload weights. In addition, the following
fields, if modified on associated exposures of a Claim, trigger recalculation on that claim:
• PrimaryCoverage
• CoverageSubtype
• LossParty
The following fields, if modified on the associated policy of a Claim, also trigger recalculation on that claim:
• PolicyType
• CustomerServiceTier
Exposure
The following fields, if modified, trigger workload recalculation on Exposure objects:
• Segment
• PrimaryCoverage
• CoverageSubtype
• LossParty
• SupplementalWorkloadWeight
The following fields, if modified on the parent claim of an exposure, triggers recalculation on that Exposure:
• LOBCode
• LossCause
The following fields, if modified on the associated policy of the parent claim of an Exposure, triggers recalculation
on that Exposure:
• PolicyType
The following fields, if modified on an associated incident of an exposure, triggers recalculation on that Exposure:
• Severity
Weighted Workload
WorkloadClassification <<delegate>>
ClaimLOBCode WorkloadDelegate
ClaimPolicyType 1
SupplementalWorkloadWeight
ClaimLossType
WorkloadWeight
Conditions
WorkloadUpdated
Priority
Weight
Claim Exposure
ClaimWorkload ExposureWorkload
Classification Classification
AssignableType
AssignableType
*
GroupUser
ClassificationCondition AssignmentWeightedWorkload
Group
Subtype User
WorkloadClassification
1
Legend
A relates to B
A B
B relates to A 1
Entity Description
WorkloadClassification Entity that defines the workload classification, which defines the administrative processing of
workload weights.
WorkloadDelegate Delegate containing common fields used by workload-aware entities, including Claim and Exposu
re. These fields track the primary and supplemental workload weights and updates to the
workload.
ClaimWorkload Claim workload classification.
Classification
ConditionFilter Type of filter associated with the workload classification condition. Subtypes include CustomerSer
viceTierConditionFilter, ExposureConditionFilter, IncidentSeverityConditionFilter, J
urisdictionConditionFilter, LossCauseConditionFilter, and SegmentConditionFilter.
ClaimPreupdate rules
Rule Description
CPU30000 – Workload Assignment Balancing This parent rule and its child rules are activated only if weighted workload
assignment is enabled in configuration.
Checks gw.api.system.CCConfigParameters.WeightedAssignmentEnabled.V
alue.
CPU30100 – Claim Closed Updates the weighted workload value whenever a claim is closed.
CPU30200 – Claim Reassignment Updates the weighted workload value whenever the assigned user on a claim
changes.
CPU30300 – Claim Reopened Updates the weighted workload value whenever a claim status changes from
“closed” to “open.”
CPU30400 – New Claim Calculates the weighted workload value on a new claim.
CPU30500 – Claim Workload Affected Updates the weighted workload value whenever a claim field that impacts
workload is altered. See “Workload weight recalculation” on page 622.
ExposurePreupdate rules
Use these rules to manage weighted workload assignment whenever specific changes take place in the assignable
object, in this case, the exposure.
Rule Description
EPU10000 – Workload Assignment Balancing This parent rule and its child rules are activated only if weighted workload
assignment is enabled in configuration.
Checks gw.api.system.CCConfigParameters.WeightedAssignmentEnabled.V
alue.
EPU10100 – Exposure Closed Updates the weighted workload value whenever an exposure is closed.
EPU10200 – Exposure Reassignment Updates the weighted workload value whenever the assigned user on an
exposure changes.
EPU10300 – Exposure Reopened Updates the weighted workload value whenever the status of an exposure
changes from “closed” to “open.”
EPU10400 – New Exposure Calculates the weighted workload value on a new exposure.
EPU10500 – Exposure Workload Affected Updates the weighted workload value whenever a field on the exposure that
impacts workload is altered. See “Workload weight recalculation” on page
622.
GroupUserWorkloadAssignmentStrategy (Default)
GroupUserWorkloadAssignmentStrategy chooses from among a set of candidate GroupUser objects the group
user who has the lowest workload weight and is the winner of ties, if any. In the base configuration, this is the
default strategy used by the sample weighted workload assignment methods provided.
GroupUserByAttributeWorkloadAssignmentStrategy
GroupUserByAttributeWorkloadAssignmentStrategy is functionally identical to
GroupUserWorkloadAssignmentStrategy, but allows the caller to specify user attribute criteria to filter down the
list of candidate users before the decision-making process begins.
UserWorkloadAssignmentStrategy
UserWorkloadAssignmentStrategy chooses from among a set of candidates the group user who has the least
weight and who is the winner of ties, if any. This selection is based on the absolute weight of the group user rather
than the group weight. See the Application Guide.
Unlike GroupUserWorkloadAssignmentStrategy, the user's calculated weight across the entire system is taken into
account rather than just within a particular group.
UserByAttributeWorkloadAssignmentStrategy
UserByAttributeWorkloadAssignmentStrategy is functionally identical to UserWorkloadAssignmentStrategy,
but allows the caller to specify user attribute criteria to filter down the list of candidate users before the decision-
making process begins.
Custom configuration
You can customize multiple components in the weighted workload assignment API. This topic includes examples on
configuring the default weight, weighted workload strategies, and classifications.
...
}
The global default weight property defined in config.xml is retrieved and stored in the AbstractWorkloadProxy
class. Now, this value is overridden and the default workload weight for all claims without any matching workload
classification is set to 15.
Note: The value for the default workload weight must be a constant, non-negative integer.
Procedure
1. Create a custom assignment strategy class, for example:
• Alternately, you can incorporate the new assignment strategy in a default group assignment rule for the
assignable entity. See “Workload weight computation” on page 625. The following example modifies the
default group claim assignment rule for weighted workload, DGC00500:
...
static function doAction(claim : entity.Claim, actions : gw.rules.Action) {
/*start00rule*/
...
...
}
}
In the base configuration, the following basic criteria are included in workload classifications:
• Claim Loss Type
• Claim Line of Business
• Claim Policy Type
In the base implementation, simple criteria mostly look at intrinsic attributes on the Assignable entity itself using
only equivalence. However, criteria are not restricted to these. Attributes for criteria can also be on subentities
pointed to by foreign keys, and criteria can include equivalence checks, range checks, or any other SQL expression
for an attribute. Note that the complexity of the criteria will affect scalability and performance.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
Name Value
name ClaimFlagged
typelist FlaggedType
nullok true
Next steps
After completing this procedure, proceed to “Step 2. Add the new criterion to the implementation classes” on page
631.
Procedure
1. Add checks for the flag attribute in ClaimWorkloadClassificationMethodImpl, which is the
implementation of the WorkloadClassificationMethods delegate for the Claim entity.
a. In Studio, navigate to configuration→config→gsrc→gw→assignment→workload→classifications and open
ClaimWorkloadClassificationMethodsImpl.
b. Modify the isMatch and buildQuery methods in this file to include the new flag status criterion, for
example.
// Check if the claim’s Flagged setting matches the predefined workload classification.
if (claim.Flagged != (WorkloadClassification as ClaimWorkloadClassification).ClaimFlagged)
{
return false
}
...
}
Next steps
After completing this procedure, proceed to “Step 3. Modify the ClaimCenter user interface” on page 632.
Procedure
1. In Studio, navigate to configuration→config→Page Configuration→pcf→admin→workload, and open
WorkloadClassificationDV.ClaimWorkloadClassification.pcf.
2. Double-click the WorkloadClassificationCommonInputSet to open it for editing.
3. Add a new Input widget below the AllClaimPolicyType widget, and enter the following properties (create
new display keys, where required):
Name Value
editable false
id AllClaimFlagStatus
label displaykey.Web.Admin.Workload.WorkloadClassification.ClaimFlagStatus
required true
4. Add a new Input widget below the ClaimPolicyType widget, and enter the following properties:
Name Value
editable true
id ClaimFlagStatus
label displaykey.Web.Admin.Workload.WorkloadClassification.ClaimFlagStatus
required true
Next steps
After completing this procedure, proceed to “Step 4. Test the new classification criteria” on page 632.
Procedure
1. Shut down ClaimCenter if it is running, and then restart it.
2. Log into ClaimCenter as a user with the appropriate permissions to view and edit classifications.
For example, log in as user su with password gw.
3. Navigate to Administration→Business→Settings→WeightedWorkload.
4. Select an active classification from the list.
The ClaimFlagStatus field is now shows in the Criteria section of the screen.
5. Click Edit.
The ClaimFlagStatus field is now editable.
6. Select a value from the drop-down list and click Update.
ClaimCenter displays a message informing you that you need to run the batch process to update existing, open
claims and exposures.
7. Click OK.
Result
The ClaimFlagStatus field now displays the value selected in Step 5.
IMPORTANT Custom conditions cannot be used with existing weighted workload classifications, if any. They can
only be applied to new classifications. See the Application Guide.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
<?xml version="1.0"?>
<subtype xmlns="http://guidewire.com/datamodel"
desc="Color Classification Condition"
entity="ColorCondition"
final="false"
priority="1"
supertype="ClassificationCondition">
<implementsInterface
iface="gw.api.assignment.workload.classifications.conditions.ConditionMethods"
impl="gw.assignment.workload.classifications.conditions.ColorConditionMethodsImpl"/>
</subtype>
Note: The new subtype, ColorCondition, must implement the ConditionMethods interface in order to
work with the weighted workload system.
4. Add the new condition subtype to the ClassificationCondition typelist:
a. Navigate to configuration→config→Extensions→Typelist and open ClassificationCondition.ttx.
b. Click the plus icon ( ), and select typecode from the drop-down choice list.
c. Enter the following values:
Name Value
code ColorCondition
priority 1
retired false
Next steps
After completing this procedure, proceed to “Step 2. Add the new condition filter” on page 634.
Procedure
1. Navigate to configuration→config→Extensions→Entity and select New→Entity.
<subtype xmlns="http://guidewire.com/datamodel"
desc="Classification condition filter by Color"
entity="ColorConditionFilter"
final="false" priority="1"
supertype="ConditionFilter">
<typekey
desc="Classification condition filter by Color"
name="Color"
nullok="false"
typelist="Color"/>
<index name="clr_cond_index_1"
desc="Prevents duplicate condition filters"
unique="true">
<indexcol name="ClassificationConditionID" keyposition="1"/>
<indexcol name="Color" keyposition="2" />
</index>
</subtype>
3. Add an array of the new filter subtype, ColorConditionFilter, to the new condition subtype,
ColorCondition, created in the previous step. The array’s values map to the filtered values for this custom
condition.
<array
arrayentity="ColorConditionFilter"
name="ConditionFilters"
cascadeDelete="true"
</array>
Next steps
After completing this procedure, proceed to “Step 3. Add the new condition to the implementation classes” on page
635.
Procedure
1. In ClaimCenter Studio, create a new class file in a logical place in your code structure. If necessary, first create
a package to hold your class file.
2. Enter the following class definition.
// If "Include All" is not selected, go through all the condition filters attached to this
// classification condition. If any match, the condition is satisfied.
if (not Condition.IncludeAll)
{
var filterSet = (Condition as ColorCondition)
if (not filterSet.ConditionFilters.IsEmpty)
{
result = filterSet.ConditionFilters.hasMatch(\ lcf ->lcf.Color == Color)
}
}
Next steps
After completing this procedure, proceed to “Step 4. Modify the ClaimCenter user interface” on page 637.
Procedure
1. In Studio, navigate to configuration→config→Page Configuration→pcf→admin→workload, and open
WorkloadClassificationDV.ClaimWorkloadClassification.pcf.
2. Add a new BooleanRadioInput widget and enter the following properties (create new display keys, where
required):
Name Value
editable true
falseLabel displaykey.Web.Admin.Workload.WorkloadClassification.RestrictedTo
id AllColors
label displaykey.Web.Admin.Workload.WorkloadClassification.AllColors
required true
trueLabel displaykey.Web.Admin.Workload.WorkloadClassification.All
value classification.ColorCondition.IncludeAll
3. Navigate to configuration→config→Page→Configuration→pcf→admin→workload→conditions.
4. Right-click and select NewPCFFile.
5. In the Filename field, enter ColorConditions. In the Filetype menu, select List View.
6. Add the following properties for ColorConditionsLV:
Name Value
Properties Tab
id ColorConditions
Name Value
editable true
elementName color
toAdd classification.ColorCondition.addToConditionFilters(color)
Name Value
toRemove classification.ColorCondition.removeFromConditionFilters(color)
value classification.ColorCondition.ConditionFilters
canPick true
hideCheckBoxesIfReadOnly true
8. Add a Row widget. Add a RangeCell widget inside with the following properties:
Name Value
editable true
id ColorConditionFilter
label displaykey.Web.Admin.Workload.WorkloadClassification.ColorConditionFilter.Color
required true
value color.Color
valueRange typekey.Color.getTypeKeys(false)
Name Value
def ColorConditionsLV
id ColorConditions
labelAbove true
10. Add a Toolbar widget inside the ColorConditions widget created in Step 8. Add an IteratorButtons
widget inside the toolbar with the following properties:
Name Value
iterator ColorConditions.ColorConditionsLV
showAddConfirmMessage true
showRemoveConfirmMessage true
switch(entityType)
{
case ClaimWorkloadClassification:
...
result.addToConditions(new ColorCondition())
...
}
Next steps
After completing this procedure, proceed to “Step 5. Test the new workload classification condition” on page 639.
638 chapter 42 Configuring weighted workload assignment
Configuration Guide 9.0.5
Procedure
1. Shut down ClaimCenter if it is running, and then restart it.
2. Log in to ClaimCenter as a user with the appropriate permissions to view and edit classifications.
For example, log in as user su with password gw.
3. Navigate to Administration→Business→Settings→WeightedWorkload.
4. Click AddClassification→AddClaimClassification to create a new classification.
5. Enter General information and required criteria. (See the Application Guide.)
The Colors field is now shows in the Criteria section of the screen.
6. Click Restricttoanyofthefollowing:, then select Add and choose a color from the drop-down menu.
7. Click Update, then OK.
8. Create a new claim with the requisite color selection.
9. Verify that ClaimCenter assigned the correct weight and classification to the claim.
This topic explains how to configure Catastrophe Bulk Associations batch job, which is a Gosu batch process.
See also
• Application Guide
It checks to see if the claim matches certain criteria. A match occurs if:
• The claim has not already been associated with a catastrophe
• The claim's loss date falls within the catastrophe's valid dates
• The catastrophe’s perils list the claim’s loss type and loss cause
• The claim does not have the catastrophe_review activity pattern with a skipped or complete status
The method findClaimsByCatastropheZone finds claims by zones. You can define the zone criteria. Examples
might be defined as: United States states, regions (southern California, Northern California), territories (western
territories such as California, Nevada, Oregon, and Washington).
Lastly, it returns all claims that match that criteria.
CatastropheType (typelist) Whether the catastrophe came from ISO data (iso) or was manually entered (internal).
This topic describes how to configure the Catastrophe Dashboard. This dashboard shows a map of policies and
claims for a catastrophe area and provides various kinds of information on claims and policies related to the
catastrophe. For information on the dashboard itself, including information on how to open it and use it, see the
Application Guide.
See also
• For information about catastrophes in general, see the Application Guide.
• For information on getting the Catastrophe Dashboard, including geocoding, up and running, see the System
Administration Guide.
Guidewire Server
Updated
Generates map legend selection
Selection
message
Locations need to be geocoded before they can be shown on the map. A geocoding service provides the latitude and
longitude from the street address, which are saved in the database. In ClaimCenter, a claim preupdate rule, CPU19000
- Geocode Catastrophe Claims, schedules geocoding if needed for a claim that is associated with a catastrophe.
Whenever the user requests a page containing a heat map, the following steps take place to show the web page:
1. For data sets that use caching, the first reference by any user loads the in-memory cache. Subsequent users
reuse the cache entry, one per cluster member. For data sets that do not use caching, the server queries the
database and puts the result into a map point buffer specific to that heat map. The buffer can be retained for
the life of the session.
2. The server substitutes values into the map template associated with BingMap.gs, such as the center point of
the map.
3. The server generates map legend images.
4. The server sends the browser the HTML for the screen. The map itself is in an <iframe>, which refers to the
substituted map template. The map template in turn refers to the map control on the map service website.
5. After the map control is loaded, it requests map and overlay tiles based on the size of the map in the browser,
the center point, and the zoom settings. HeatMapGenerator creates overlay tiles on demand from the map
point data in the buffer.
If the user pans or zooms in the map, the map control requests and displays the appropriate map and overlay tiles.
The map template sends the new zoom level and center point to the server immediately, preserving this state
information if the user navigates away from the map and later returns.
Whenever the user selects an area on the map by dragging a rectangle, the map template sends the coordinates of the
rectangle to the server immediately. HeatMapGenerator returns the SelectionMessage property, which the map
template displays in the screen in the PCF Input widget with the ID property equal to
HeatMapGenerator.SelectionMessageID. If HeatMapGenerator.RefreshUponSelection is true, the page is
refreshed to update the PCF file elements.
Classes and template files not specific to the catastrophe heat map
The following classes and template files are available both in ClaimCenter and in PolicyCenter unless designated
ClaimCenter only.
• HeatMapGenerator.gs – Base class for defining a heat map. The fully qualified name is
gw.api.heatmap.HeatMapGenerator.
• HeatMapDataSet.java – Abstract class defining a data set, its query, and caching. The fully qualified name is
gw.api.heatmap.HeatMapDataSet.
• LatLong.java – Base class that holds the latitude and longitude for a map point. The fully qualified name is
gw.api.heatmap.LatLong.
• HeatMapCacheBase.java – Abstract base class to define a cache for a single data set (ClaimCenter only). The
fully qualified name is gw.api.heatmap.HeatMapCacheBase.
• HeatMapCacheEntry.java – Interface for a cache entry that has status information and blocking and non-
blocking load methods (ClaimCenter only). The fully qualified name is gw.api.heatmap.HeatMapCacheEntry.
• HeatMapCachePlugin.gs – Plugin class implementation that initializes caches (ClaimCenter only). The fully
qualified name is gw.api.heatmap.impl.HeatMapCachePlugin.
• BingMap.gs – Provides settings to use with Bing Maps. The fully qualified name is gw.api.heatmap.BingMap.
• HeatMapHTML.gst – HTML template for the map control and legend. The fully qualified name is
gw.api.heatmap.HeatMapHTML.
• BingMapJavaScript.gst – JavaScript template for passing parameters to BingMap.js. The fully qualified name
is gw.api.heatmap.BingMapJavaScript.
• BingMap.js – JavaScript code for the heat map. In ClaimCenter Studio, navigate in the Project window to
configuration→deploy→resources→javascript→heatmap and double-click BingMap.js to open it.
• HeatMapLegend.gs – Generates a map legend. The fully qualified name is gw.api.heatmap.HeatMapLegend.
• HeatMapColorMap.java – Interface or mapping from the count or value for a pixel to a color for a single data
set. Holds the legend labels. The fully qualified name is gw.api.heatmap.HeatMapColorMap.
• RangeColorMap.java – Color map that assigns a range of values to a color. For example 1-1000 is the first
color. The fully qualified name is gw.api.heatmap.RangeColorMap.
Procedure
1. Put the database query in the mapPointQuery method in your subclass of HeatMapDataSet.
2. Do not override getMapPoints.
3. Optionally, set HeatMapGenerator.MapPointsTimeout, which has a default of 60 minutes, declared as
3,600,000 milliseconds. The buffer is released whenever the user logs out or whenever the buffer has not been
used for the specified interval. The heat map does a new query the next time the buffer is needed.
Procedure
1. Use code similar to CatastropheClaimDataSet.gs and CatstropheClaimHeatMapCache.gs.
2. In the data set class, a subclass of HeatMapDataSet.java, do the following:
• Define the query in a static method in the data set, such as in the method findClaimsForCatastrophe.
• Define mapPointQuery to get the value for the cache entry.
• Define getMapPoints to refer to mapPointQuery.
• Do not set MapPoints in your code.
3. In the cache class, a subclass of HeatMapCacheBase.java, do the following:
• Set the timeout interval for the cache in the constructor call to super. The query is repeated after this
interval. If the cache value is not fetched for two intervals, the buffer is released.
• Define a load method that calls the query method in the data set class.
• Define createAndPreload to create the cache and optionally preload.
Preloading executes the query and loads the buffer whenever the server comes up. Otherwise, the first user to
reference the cache entry triggers the query, which might cause a long wait. Note that HeatMapCacheEntry
has status information and both blocking and non-blocking load methods.
4. In HeatMapCachePlugin.gs, add a line to the createCaches method that calls createAndPreload in the
cache class.
Procedure
1. Add the values needed for filtering to your LatLong subclass. To keep memory use down and make the filter
condition evaluate quickly, you can precompute complex filter conditions and reduce them to simple variables
saved in the LatLong subclass.
2. Add the necessary data to the query for your data set.
3. Define a filter method in the data set class. Because the filter is evaluated very frequently, make the function
as simple and quick as possible. Avoid lengthy loops and database queries.
• CatastropheClaimHeatMapCacheRefreshSecs – Specify the interval at which the catastrophe heat map will
refresh claim information from the database. A smaller interval will provide more up-to-date information, but
will impact performance.
• CatastrophePolicyLocationHeatMapCacheRefreshSecs – Specify the interval at which the catastrophe heat
map will refresh policy location information from the database. A smaller interval will provide more timely
policy data, but will impact performance.
Configuration How to do it
Add a map view. In CatastropheHeatMapViews.gs:
1. Define a new instance of CatastropheHeatMapView similar to ClaimCountsView.
2. Add the view name to AvailableViews. If the view shows claims or policies or both, add the view
name to ClaimViews or PolicyLocationViews or both.
Show additional Modify the query in CatastropheSearchCriteria.performHeatMapPolicyLocationSearch and Policy
data in the policy LocationSearchResultsLV.pcf.
location table.
Modify tooltips. Modify the code in getToolTip in CatastropheHeatMap.gs. The tooltip is represented as an HTML
fragment.
Modify the The heat map shows the selection message whenever the user set the selection rectangle on the map,
selection message. such as, "56 claims and 112 policy locations selected".
The selection message varies depending on the map view. See the code for each map view in Selection
Message in CatastropheHeatMapViews.gs.
Change heat map In CatastropheHeatMapViews.gs, pass the heat map colors to the constructor for RangeColorMap,
colors and legend which initializes the labels appropriately. You can change the labels after calling the constructor, as is
labels. done for policyColorMap. Each data set is associated with one color map.
Show amounts on In the data set class, define a getWeight method that returns the amount. The amount must be an int
the map rather and be greater than or equal to zero. To show a marker on the map for a zero value, subclass RangeColor
than counts. Map and override getColorForValue as is done in AmountColorMap in CatastropheHeatMapViews.gs.
Set the map size. You can change the height by changing the setSize call in the constructor for CatastropheHeatMap.gs.
The HTML code specifies using all the available width. To use a specified width instead, change Catastro
pheHeatMapHTML.gst, replacing occurrences of the string "width:100%" in two places with "width:${ r
equestedWidth }px".
Other Refer to the Gosu API documentation for the relevant classes, as described at the Gosu Reference Guide.
configurations.
Procedure
1. Create a new JavaScript file in the same directory as BingMap.js. You can subclass HeatMap and override
methods by following JavaScript conventions. Structure your file by using code similar to the following:
function MyExtension() { }
MyExtension.prototype = new HeatMap();
MyExtension.prototype.superclass = HeatMap;
MyExtension.prototype.constructor = MyExtension;
heatMap = newMyExtension();
2. Subclass BingMap.gs and override javaScriptFileNames to include your JavaScript file after the
BingMap.js file.
3. Change the HeatMapServiceTemplate parameter in config.xml to use the fully-qualified subclass name.
Bing uses quad tree-based keys. At the lowest zoom level, the entire world, the map is divided into four tiles, each
identified by a single-digit number, 0..3. At the next zoom level, each tile is subdivided into four subtiles, identified
as 00, 01, 02, 03, 10, 11, 12, 13, and so on. See http://msdn.microsoft.com/en-us/library/bb259689.aspx for
a full description.
The numbers in the Google identifier are the zoom level, the x coordinate, and the y coordinate. See the following
web pages for a full description:
• https://developers.google.com/maps/documentation/javascript/maptypes#TileCoordinates
• https://developers.google.com/maps/documentation/javascript/maptypes
You might find it helpful to use Firefox and the Firebug debugger to develop the interface to a new map service.
Firebug can display all messages sent to and from the browser.
See also
• https://developer.mozilla.org/en-US/docs/Tools
• https://developers.google.com/web/tools/chrome-devtools/
servletResponse.setHeader("Content-Type", "text/plain")
// use StreamUtil.toBytes() to handle UTF-8 characters correctly
servletResponse.getOutputStream().write(StreamUtil.toBytes(TextMessage))
See also
• Gosu Reference Guide
You can configure Gosu templates to modify the search criteria for duplicate claims and checks. ClaimCenter checks
if there are any matching claims or checks to avoid duplication.
DuplicateCheckSearchTemplate Parameters
DuplicateCheckSearchTemplate takes three parameters:
• A DuplicateSearchHelper object, which provides utility methods for SQL construction.
• The Check to search for duplicates.
• A checkBeingCloned parameter. If the check is a clone of an existing check, this parameter contains the existing
check. The search avoids returning the existing check or any of its recurrences as a duplicate. Otherwise,
checkBeingCloned is null.
Area Gosu
Comments /*
This is a comment
that spans multiple lines.
*/
and
// This is a single-line comment.
Procedure
1. In class DuplicateClaimSearchTemplate, find the following functions:
and
2. Change the numeric parameter for addDays, save your work, and restart the application server.
This topic describes how to configure Claim Health Metrics. You can add a new tier, a high-risk indicator, or a new
claim metric. You can also add a new tier for additional granularity, like exposure tiers, which are more granular
than claim tiers. You can create a high-risk indicator for anything that is important to your business. For example,
you might add a high-risk indicator for property damage over a certain amount or perhaps a missed doctor’s
appointment for the workers compensation policy type. You might also create a new metric to measure time to get
an estimate completed for the personal auto policy type.
See Also
• the Application Guide to learn about this feature.
• the Application Guide to learn how to administer claim health metrics.
Procedure
1. Navigate in the Studio Project window to configuration→config→Extensions→Typelist.
2. Select either the ClaimTier. or the ExposureTier typelist extension, depending on your purpose. Double-click your
choice to open it in the typelist editor.
3. In the typelist editor, create a new tier value typecode and associate it with policy types by adding categories
from the PolicyType typelist to the new typecode.
4. Save your work and exit Studio.
Next steps
After you complete this procedure, continue to “Step 2 – Define target values for the new tier in ClaimCenter” on
page 659.
Procedure
1. Open ClaimCenter and log in as a user who is an administrator.
2. In the Administration tab, navigate to Business Settings→Metrics and Thresholds in the left Sidebar.
3. Choose the policy type for the metric limit you want to set.
4. Click Edit and select the new tier from the drop-down list for the metric whose limit you are setting.
5. Enter the target values for the new tier on that metric and policy type.
6. Click Update.
Next steps
After you complete this procedure, continue to “Step 3 – Edit the tier enhancement Gosu code in Studio” on page
659.
Procedure
1. Navigate in Studio to configuration→gsrc, and then to gw→entity.
Example - Adding a new tier to ClaimCenter 659
Configuration Guide 9.0.5
IMPORTANT Guidewire strongly recommends limiting the number of indicators used for any one line of business.
Overuse of indicators lessens the overall impact to end users. Additionally, Guidewire designed the Claim Summary
screen with the expectation that few, if any, claims will have more than four or five indicators. If the number of
indicators per claim exceeds this expectation, Guidewire recommends that you revisit the Claim Summary screen
design and determine if it needs to be modified. Otherwise, important claim information can appear farther down
the screen, necessitating additional scrolling.
Note: Each time you create a new subtype, you must modify the PCF files to show the new indicator in the info bar
and on the Claim Status screen. If the indicator implements the standard On property and has an icon, it can also
appear on the Claim Summary screen. That screen relies on the generic indicator interface and can show the indicator
automatically, whenever it is on.
Procedure
1. Create the icon image by using a third-party graphics program.
2. Manually copy the image file into the following location in the ClaimCenter installation directory:
modules/configuration/webresources/themes/shared/resources/images/app
gwb compile
Next steps
After completing this procedure, continue to “Step 2 – Add a new ClaimIndicator subtype in Studio” on page 661.
Procedure
1. In the Studio Project window, navigate to configuration→config→Extensions→Typelist and double-click
ClaimIndicator.ttx to view the existing typecodes.
In the base configuration, they are:
• ClaimIndicator
• LitigationClaimIndicator
• FatalityClaimIndicator
• LargeLossClaimIndicator
• CoverageInQuestionClaimIndicator
• SIUClaimIndicator
• FlagClaimIndicator
• SubrogationClaimIndicator
You can add your custom subtype to this typelist.
2. Define a new entity subtype. The supertype you choose depends on the type of indicator that you want.
a. Navigate to configuration→config→Extensions and right-click Entity.
b. Click New→Entity.
c. Enter the name ExampleClaimIndicator and click OK.
d. In the text tab, enter the following entity definition:
<?xml version="1.0"?>
<subtype xmlns="http://guidewire.com/datamodel" desc="Litigation"
entity="ExampleClaimIndicator" final="false" priority="1"
supertype="ClaimIndicator">
<implementsInterface
iface="gw.api.claim.indicator.ClaimIndicatorMethods"
impl="gw.claim.indicator.ExampleClaimIndicatorMethodsImpl"/>
</subtype>
The iface attribute defines the interface that the subtype implements. The implementsInterface
element must be present, and the impl class must be your own implementation class. Use the package
gw.claim.indicator and your new SubtypeNameMethodsImpl class, which you define later.
Example – Add a high-risk indicator 661
Configuration Guide 9.0.5
3. Stop and restart Studio to automatically create a typecode for the new subtype to the ClaimIndicator typelist.
You configure the secondary attributes of the typecode– Name, Description, and Priority.
For example, navigate to configuration→config→Extensions→Typelist and open ClaimIndicator.ttx, and then
click the new typecode to edit it.
This step enables you to set up a possibly localized name and priority for the indicator. The Name attribute is
the name you want to show in the user interface for this type of indicator. The Priority determines the order in
which the indicators appear on the screen.
4. Implement your new SubtypeNameMethodsImpl class. Your class can implement the
ClaimIndicatorMethods interface. If, instead, you extend the ClaimIndicatorMethodsImpl class, you get
the following conveniences:
• Automatic handling of the icon. You need to specify only the string name of your indicator icon when you
call the constructor of ClaimIndicatorMethodsImpl.
• The method setOn(newValue: boolean), which you can use to set the IsOn flag and the WhenOn field of the
indicator.
Following is an example of an implementation:
package gw.claim.indicator
uses gw.api.claim.indicator.ClaimIndicatorMethodsImpl
class ExampleClaimIndicatorMethodsImpl extends ClaimIndicatorMethodsImpl {
/**
* Constructor, called when an indicator is created or read from the database
*/
construct(inIndicator : ExampleClaimIndicator) {
super(inIndicator, "indicator_icon_litigation.gif") // Passes in name of indicator icon
}
/**
* Update, sets the indicator on if the the claim litigation status is "litigated"
* or "complete"
*/
override function update() {
var status = Indicator.Claim.LitigationStatus
setOn(status == "litigated" or status == "complete")
// Calls setOn to set both IsOn and WhenOn fields
}
/**
* Text label, returns the description of the current claim litigation status
*/
override property get Text() : String {
return Indicator.Claim.LitigationStatus.Description
}
/**
* Hover text returns the names of any open matters,
* or a special label if there are none.
*/
override property get HoverText() : String {
var openMatters = Indicator.Claim.Matters.where(
\ m -> not m.Closed).orderBy(\ m -> m.CreateTime)
return openMatters.Count > 0
? openMatters.map(\ m ->
m.Name).join(displaykey.Web.LitigationClaimIndicator.MatterNameSeparator)
: Indicator.Claim.LitigationStatus.DisplayName
}
}
5. After implementing the class required by your claim indicator entity, you can regenerate the data dictionary to
ensure that the new entity has the correct definition.
At a command prompt, navigate to ClaimCenter and enter:
gwb genDataDict
6. Add a new info bar element to the ClaimInfoBar PCF file. You must add the element explicitly, even though
the required element is standard.
For example, for a new indicator type called ExampleClaimIndicator:
a. Navigate to configuration→config→Page Configuration→pcf→claim→ClaimInfoBar.
b. Drag an InfoBarElement from the Toolbar on the right and drop it on the InfoBar. If you see a message asking
if you want to edit the file, click Yes.
c. Click the new InfoBarElement and set the following properties:
Property Value
id ExampleClaimIndicator
icon Claim.ExampleClaimIndicator.Icon
tooltip Claim.ExampleClaimIndicator.HoverText
visible Claim.ExampleClaimIndicator.IsOn
IMPORTANT If you retire a metric limit by using Gosu or the database without replacing it with a new limit, new
claims will continue to use the retired metric limit.
Procedure
1. In the Studio Project window, navigate to configuration→config→Metadata→entity and review the following claim
metric entities:
• DecimalClaimMetric.eti
• IntegerClaimMetric.eti
• MoneyClaimMetric.eti
• PercentClaimMetric.eti
• TimeBasedClaimMetric.eti
Your selection depends on the type of quantity the metric is tracking.
Note: You can add a direct implementation of ClaimMetric rather than subtyping one of the pre-supplied
claim metric classes. Doing so is appropriate if the value of the metric does not fall into any of the pre-
supplied types—integer, decimal, percent, money, or time based. It is also possible to add arbitrary new data
fields to your subtype if your metric needs them.
2. Create a new metric based on TimeBasedMetric as follows:
a. In Studio, navigate to configuration→config→Extensions, right-click Entity, and select New→File.
b. Enter the file name ExampleClaimMetric.eti and click OK.
c. In the Text tab, enter the following entity definition.
Note: If you copy and paste the following code, delete any leading spaces before the first line of code.
<?xml version="1.0"?>
<subtype desc="Example Claim Metric" entity="ExampleClaimMetric"
final="false" priority="1" supertype="TimeBasedClaimMetric">
<implementsInterface
iface="gw.api.metric.MetricMethods"
impl="gw.claim.metric.general.ExampleClaimMetricMethodsImpl"/>
<implementsInterface
iface="gw.api.claim.metric.RecalculateMetrics"
impl="gw.claim.metric.general.ExampleClaimMetricMethodsImpl"/>
</subtype>
• You must use the first implementsInterface element and specify your own implementation class for the
impl attribute. The implementation class name is, by convention, SubtypeNameMethodsImpl.
• The second implementsInterface element makes it possible for the Recalculate Claim Metrics batch job
to recalculate this metric. You rarely need to implement RecalculateMetrics. If you do so, you must also
implement this interface in the class you specify in the impl attribute, which is the same class in the
previous implementsInterface element. For more information, see “Step 2 – Extend the TimeBasedMetric
class” on page 665.
• Save the file.
3. Close Studio, and then restart it to automatically add a typekey for your new subtype to the ClaimMetric
typelist.
4. In Studio, navigate to configuration→config→Extensions→Typelist and double-clicking ClaimMetric.ttx.
Note: If you do not see the new typecode in the ClaimMetric typelist, there is probably an error in your
entity definition. Check your definition and make sure that it is correct.
5. Click the new typecode to edit it. Set the following values:
The Name of the typecode element is the name that appears in the user interface for this type of metric. You
can localized this name. The Priority determines the ordering of the metric in the Claim Metrics user interface.
It appears after any metrics with priority less than 4 and before any with priority more than 4.
After completing this procedure, continue to “Step 2 – Extend the TimeBasedMetric class” on page 665.
package gw.claim.metric
uses gw.api.claim.metric.TimeBasedClaimMetricMethodsImpl
uses gw.api.metric.MetricUpdateHelper
uses gw.api.claim.metric.RecalculateMetrics
uses java.util.Date
@Export
class ExampleClaimMetricMethodsImpl extends TimeBasedClaimMetricMethodsImpl
implements RecalculateMetrics {
construct(exampleClaimMetric : ExampleClaimMetric) {
super(exampleClaimMetric, ClaimMetricCategory.TC_OVERALLCLAIMMETRICS)
}
override function updateMetricValue(helper : MetricUpdateHelper) : Date {
Metric.StartTime = Metric.Claim.ReportedDate
handleClaimStateChange()
return null
}
override function recalculate() : Date {
var result = recalculateValue()
updateMetricLimitReachedTimes()
return result
}
}
This example is time-based. It extends the provided TimeBasedClaimMetricMethodsImpl class, which gives
access to time-specific fields like Metric.StartTime. The class also provides the handleClaimStateChange
method for updating the metric state if the claim opens or closes. Additionally, the recalculate method
updates the limit reached times if the new metric value has caused it to pass a limit. The method returns the
time when you want to metric to be recalculated.
Note: This example is somewhat artificial, because as long as the metric is open, its value changes with time. You
typically use RecalculateMetrics with a metric that is not time-based and whose value might change due to
some known future event that does not affect the database. For example, a metric that provides a count of overdue
activities must be recalculated by the batch job when an existing activity becomes overdue.
IMPORTANT All implementation classes must have a constructor that takes one parameter of the actual metric
type. The implementsInterface mechanism requires this constructor because the object is created whenever the
metric is read from the database.
1. If you need to do something only as the metric is first created, you can add a constructor like the following
one:
construct(exampleClaimMetric : ExampleClaimMetric) {
super(exampleClaimMetric, ClaimMetricCategory.TC_OVERALLCLAIMMETRICS)
if (exampleMetric.New) {
// Do your initialization here
}
}
The constructor also determines the category of the metric and hands it as a parameter to the superclass
constructor.
The updateMetricValue method evaluates the current state of the associated claim and updates the metric
accordingly. The method in the example is simple. Other update methods might compute more complex
values. You can use the MetricUpdateHelper passed to the update method to find out if relevant entities
changed. For example:
if (helper.updateContainsChangesOfType(History)) {
// A history event was added, updated or removed
// You can access the changed items by using
// Metric.Bundle.getAllModifiedBeansOfType(History).
}
After completing this procedure, continue to “Step 3 - Update claim metric rule” on page 666.
gwb genDataDict
This action regenerate the data dictionary and ensures that your data model changes are correct.
gwb runServer
After completing this procedure, continue to “Step 4 – Add limits for metric type” on page 667.
IMPORTANT Before users start creating new claims or processing of existing claims begins, you must perform the
following steps in each environment to which you deploy the new configuration. For example, environments might
include a development environment, UAT, and production.
1. Log into ClaimCenter as an administrator, such as user name su with password gw.
2. Click the Administration tab and then navigate to Business Settings→Metrics and Thresholds in the left sidebar.
3. Click Edit and on the Claim Metric Limits tab, add limits for your new metric type. For more information, see the
Application Guide.
After completing this procedure, continue to “Step 5 – Run claim health batch processing” on page 667.
IMPORTANT Before users start creating new claims or processing of existing claims begins, you must perform the
steps in each environment to which you deploy the new configuration. For example, environments might include a
development environment, UAT, and production.
This procedure runs Claim Health Calculations batch processing to populate metrics on claims that have never had
any metrics. Running this batch process does not add the new metric to claims that already have metrics.
1. Log into Guidewire ClaimCenter using an administrative account.
2. Press Alt+Shift+T to open the Server Tools tab.
3. Click Batch Process Info in the left sidebar.
4. Run the Claim Health Calculations batch process.
5. If you have any metrics that implement RecalculateMetrics, set Recalculate Claim Metrics batch process to run
on a regular basis.
You can also manually run this process for testing.
6. If you enabled the Recalculate Claim Metrics rule previously in “Step 3 - Update claim metric rule” on page 666,
click Work Queue Info in the left sidebar. Then run the ClaimException batch process writer to begin processing
existing claims and adding the new metric.
For more information on batch processes, see the System Administration Guide.
/**
* Returns the calculator used by the metric for date calculations.
* Default is BUSINESS.
*/
override property get DateCalculator() : DateCalculator
{
return ExtensionInterfaces.DateCalculatorExtensions.BUSINESS_DAYS
}
You will need to override the DateCalculator method in the subclasses, as needed, to specify calendar days as the
calculation parameter, as shown in the following example.
The following subclasses of TimeBasedClaimMetricMethodsImpl are relevant to metrics calculations for claims.
• DaysLastViewedByUserClaimMetricMethodsImpl
◦ DaysLastViewedBySupervisorClaimMetricMethodsImpl
◦ DaysLastViewedByAdjusterClaimMetricMethodsImpl
• DaysInitialContactWithInsuredClaimMetricMethodsImpl
• DaysOpenClaimMetricMethodsImpl
• TimeToFirstPaymentClaimMetricMethodsImpl
Similarly, the following subclasses of TimeBasedExposureMetricMethodsImpl are relevant to metrics calculations
for exposures.
• DaysOpenExposureMetricMethodsImpl
• TimeToFirstPaymentExposureMetricMethodsImpl
• DaysInitialContactWithClaimantExposureMetricMethodsImpl
You can configure recently viewed claim information in the Claim tab. You use this tab to either create a new claim,
search for a specific claim, or access a recently viewed claim from a list. In the base configuration, the lines of
business are configured to show the claim number and the insured’s name. However, an exception is the workers’
compensation line of business. In the base configuration, this line of business displays the claim number and the
claimant’s (injured worker’s) name. This makes sense as a carrier can insure a large-sized employer and have many
workers’ compensation claims from different employees under that one employer. In another example, one adjuster
can be working on multiple claims for one insured in the commercial lines of business. It is even possible that all the
open claims for one adjuster could belong to the one insured. Therefore, seeing the insured’s name is not as
informative as seeing the claimant’s name.
This topic explains how to configure the recently viewed claims list that is used in the Claim tab.
2. Click the sign to add a new viewEntityColumn and enter the following values.
Name Value
name LossDate
path LossDate
Name Value
Name LossDate
Configuring incidents
There are several different approaches to creating and editing exposures based on incidents in the user interface.
Implicit incidents
After creating a new exposure, a new incident is also created, and the exposure and incident remain bound together
from that point. All exposures require a reference to an incident. In cases where the user cannot select an incident,
such as the exposure type GeneralDamage, the incident is created implicitly.
Use the New Exposure and Exposure Detail screens to edit a mix of exposure and incident fields. For example, the
description field, which is part of an incident, displays like a normal exposure field.
There are two exposure screens in the New Claim wizard and in the main claim file that can create implicit incidents.
For example, NewExposure.pcf has the following Variables definitions for Exposure and Incident:
• Exposure
◦ name – Exposure
◦ type – Exposure
◦ initialValue – Claim.newExposureWithNoIncident(
◦ CoverageType, CoverageSubtype, Coverage)
• Incident
◦ name – Incident
◦ type – Incident
◦ initialValue – Exposure.initializeIncident()
Code is also defined for these two variables in NewClaimWizard_NewExposurePopup.pcf:
• Exposure
◦ name – Exposure
◦ type – Exposure
◦ initialValue – Wizard.addExposureWithNoIncident(
Explicit incidents
For injury, vehicle damage, and property damage exposure types, incidents can be created ahead of time on the Loss
Details screen. They are explicitly linked with an exposure on the New Exposure or Exposure Detail pages.
On the ClaimCenter screen, you see a drop-down list of all suitable incidents. You can also create a new incident.
For these exposure types, the Exposure.initializeIncident method attempts to pre-fill the incident picker. You
can always configure his picker and change the pre-filled value. For information on how this method is used to
create implicit incidents, see “Implicit incidents” on page 671.
who uses a quick claim page is always creating an immediate exposure, use the quick claim configuration to create
the exposure and incident together. Edit the contents, but not the association between them, on the quick claim page.
Exposure.VehicleIncident.DriverRelation = "self"
The type safe incident accessor returns null if the exposure's incident is not the named type. So
Exposure.VehicleIncident returns null on a BodilyInjuryDamage exposure. After you are reading the property,
you can use a supertype of the actual incident type. For example, Exposure.MobilePropertyIncident can be used
to read mobile property incident fields on a VehicleDamage exposure, because MobilePropertyIncident is a
supertype of VehicleIncident. But if you set the property, you must use an incident of the exact type because all
exposures of a particular type must have incidents of a particular type. For example:
Exposure.ExposureType = "GeneralDamage"
var Incident = new Incident(Exposure)
var VehicleIncident = new VehicleIncident(Exposure)
Exposure.Incident = VehicleIncident // fine
Exposure.MobilePropertyIncident = VehicleIncident // throws exception
Incident properties are actually on the exposure's incident, so the syntax for setting an incident property is:
Exposure.Incident.Description = "whatever"
There are also some exposure methods for creating or selecting incidents for an exposure. These methods are mainly
intended for use by the user interface code when a new exposure is created.
Special handling instructions are a set of additional steps in claims processing that can be associated with accounts
or service tiers.
This topic explains how to configure special instructions, specifically service tiers, email notifications, and claim
headline comments.
The following configuration tasks can be performed:
• Create and enable new service tiers.
• Configure contact roles for special handling notifications.
• Configure Instruction Types and Instruction Categories for claim headline comments.
See also
• Application Guide
SpecialHandling
AccountSpecialHandling CustomerServiceTier
Account SpecialHandling
CustomerServiceTier
«typelist»
Account CustomerServiceTier
AccountNumber
AccountHolder
SpecialHandling Policy
CustomerServiceTier
Legend
A relates to B
A B
B relates to A
A B A is a subtype of B
Procedure
1. Start ClaimCenter Studio.
2. In the Studio Project window, navigate to configuration→config→Extensions→Typelist, double-click and open the
CustomerServiceTier.ttx typelist.
3. Right-click and select Add new... typecode and enter the values for your new service tier.
For example, enter the following values:
Note: Restart the server before proceeding to enable the service tier.
4. In the Administration menu, click Administration→Special→Handling→Service Tiers and select AddServiceTier to add
the tier.
Next steps
See also
• the Application Guide
Procedure
1. Start ClaimCenter Studio.
2. In the Studio Project window, navigate to configuration→config→Extensions→Typelist, double-click and open the
ContactRole.ttx typelist.
3. Select the SpecialHandling typefilter.
4. Add the contact role to the typefilter, as follows:
a. Right-click, select Addnew... and click IncludeIntoFilter....
b. Select the desired claim contact role and click Finish.
The role now appears in the SpecialHandling typefilter list.
5. Restart the application server.
Result
You can now see the recently added contact role in the ContactRole field of the NewAutomated Notification screen.
Next steps
See also
• Application Guide
Procedure
1. Start ClaimCenter Studio.
Procedure
1. Log into Guidewire ClaimCenter using an administrative account.
2. Navigate to Administration→Business→Settings→ActivityPatterns.
3. Do one of the following:
• Select AddActivityPattern to create a new activity pattern.
• Select an existing activity pattern and click Edit.
4. In the Category field, select Handling Instructions.
Result
This action marks the activity pattern for special handling and makes it available for selection in the SpecialHandling
menu.
This topic describes how to customize and configure contact roles and relationships in a Guidewire application. It
supplies some common examples you can use to configure your own installation. The roles discussed in this topic
apply only to contacts. Another type of role is the user role, which is a collection of permissions that enable a user to
view or edit various ClaimCenter or ContactManager objects.
See also
• For information on user roles and security related to accessing contacts in the Address Book, see the Guidewire
Contact Management Guide.
• For information on roles in general and on roles used in ClaimCenter, see the Application Guide.
IMPORTANT Do not add a contact role to a custom entity. ClaimCenter does not support this configuration.
Procedure
1. Add the role to the ContactRole typelist.
2. Define the following two types of constraints for the role in the entityroleconstraints-config.xml file.
• A contact role constraint indicates the contact subtype, such as Person or Company, to which the role
applies.
• An entity role constraint defines which roles an entity can use. It can also optionally specify whether a role
is required, exclusive, or prohibited, and conditions that apply to use of the role by the entity.
3. After completing work on the typelist and the XML file, you must rebuild and redeploy ClaimCenter.
Guidewire also recommends that you regenerate the Data Dictionary. In any case, Guidewire requires that you
regenerate the Data Dictionary for production deployments.
Next steps
See also
• “About contact roles” on page 680
• “Defining role constraints” on page 681
• “About entity role constraints” on page 682
Many of the codes in the ContactRole typelist, such as activityowner, claimant, insured, vendor, and venue,
are internal to the application. The typelist editor lists the internal codes with a Code field that has a gray
background. The editor does not let you remove these typecodes.
You can also look up the ContactRole typelist in the Data Dictionary. The dictionary marks the Internal column true
for the codes that Guidewire defines as internal.
IMPORTANT In general, if you remove any typecodes from any typelist, first ensure that the code is not in use in
the application instance in a PCF file. Also verify that another typelist does not reference that typecode.
Contact roles exist in relation to entities. You define which entities use a role by referencing the role from the
entityroleconstraints-config.xml file.
See also
• “View or edit the ContactRole typelist” on page 681
Procedure
1. Open Guidewire Studio, if it is not already running.
a. Open a command prompt and navigate to the ClaimCenter installation directory
b. Enter the following command:
gwb studio
Next steps
See also
• “Defining role constraints” on page 681
In this example:
• The contactRoleCode specifies the role’s code name, which is mattermanager.
• The contactSubtype identifies the subtype to which the role belongs, which is Person.
If each of your contact roles uses only one Contact subtype, ClaimCenter can ensure that the role is assigned to the
correct contact type. Additionally, your PCF configuration is relatively simple. However, if a role uses more than
one subtype, you must configure an ExceptionConstraint. This configuration helps to ensure that selection of this
role does not result in assignment of the wrong contact type. Even with this configuration, it is possible to have the
wrong type assigned to the role, as explained in the following claimant role description.
The base configuration roles are all set up to use one subtype, with a single exception, the claimant role, which can
be both a Person and a Company. To specify the additional subtype, this configuration uses the
ExceptionConstraint tag, as shown in the following example:
The ExceptionConstraint tag ensures that the claimant role is always performed by a Person except if using an
Exposure entity. In that case, a Company can also perform this role. As the system starts up, it calculates the nearest
supertype of the two subtypes and effectively assigns the claimant role to that supertype. For the claimant role, the
nearest supertype is Contact.
Note: Calculating the nearest supertype can still result in assignment of an incorrect contact type unless you
account for this possibility in your configuration. The possibility of incorrect type assignment is one reason
Guidewire encourages you to associate a contact role with a single subtype.
<EntityRoleConstraint>
<EntityRef entityType="Claim">
<RoleRef contactRoleCode="FirstIntakeDoctor">
<RoleConstraint constraintType="Exclusive"/>
</RoleRef>
<RoleRef contactRoleCode="InsuredRep"/>
<RoleRef contactRoleCode="LawEnfcAgcy"/>
<RoleRef contactRoleCode="OccTherapist"/>
<RoleRef contactRoleCode="PhysTherapist"/>
<RoleRef contactRoleCode="PrimaryDoctor">
<RoleConstraint constraintType="Exclusive"/>
</RoleRef>
<!-- some definitions skipped for brevity -->
<RoleRef contactRoleCode="claimant">
<RoleConstraint constraintType="Exclusive"/>
<RoleConstraint constraintType="Required">
<AdditionalInfo propertyName="LossType" value="WC"/>
</RoleConstraint>
<RoleConstraint constraintType="Prohibited">
<AdditionalInfo propertyName="LossType" value="AUTO"/>
<AdditionalInfo propertyName="LossType" value="PR"/>
<AdditionalInfo propertyName="LossType" value="GL"/>
</RoleConstraint>
</RoleRef>
<RoleRef contactRoleCode="claimantdep"/>
<RoleRef contactRoleCode="codefendant"/>
...
</EntityRef>
</EntityRoleConstraint>
Exclusive At most one contact associated with the entity can fulfill this role. It is possible that the entity does not have
anyone in this role.
Required This entity must have at least one contact in this role.
Prohibited None of the contacts for this entity can have this role. Often qualified with an AddtionaInfo tag to limit the
application of this constraint.
ZeroToMore This entity can have no contact, one contact, or many contacts that use this role, which is the default behavior
for a role that has no constraint types defined. Do not use this constraintType with Exclusive.
If you want to ensure that an entity has exactly one contact that fills a particular role, add two RoleConstraint tags
to the RoleRef—an Exclusive and a Required constraint.
In the previous <EntityRoleConstraint> example, the FirstIntakeDoctor role has an Exclusive constraint.
This constraint means that a FirstIntakeDoctor is not required for a Claim, but if a FirstIntakeDoctor is needed
for the Claim, only one can be assigned. The same is true for a PrimaryDoctor.
<EntityRef entityType="Claim">
<RoleRef roleCode="claimant">
<RoleConstraint constraintType="Required">
<AdditionalInfo propertyName="LossType" value="AUTO"/>
</RoleConstraint>
<RoleConstraint constraintType="Prohibited">
<AdditionalInfo propertyName="State" value="CA"/>
</RoleConstraint>
</RoleRef>
</EntityRef>
If, at run time, a Claim has a LossType of AUTO and a State value of CA, there is a conflict. Auto claims require a
claimant, but according to this constraint definition, in California, a claimant is prohibited on a claim.
ClaimCenter resolves this conflict by calculating constraint precedence and using the constraint with the highest
precedence. The following list shows the order of constraint precedence from highest to lowest:
• Prohibited
• Exclusive & Required
• Exclusive
• Required
• ZeroToMore
In the previous example, Prohibited has higher precedence than Required, so the claimant role cannot be
assigned on this auto insurance claim in California.
Note: A workers compensation claim can (and must) own a contact with the role of claimant.
See also
• “How configuring roles impacts entity data and types” on page 684
• “Add a new contact role: example” on page 688
• “Relationships between contacts” on page 690
Method Description
getClaimant(): Contact Returns the claimant for a claim or, in the case of an
exposure that has a claimant, for the exposure.
getClaimants(): Contact[] Returns all claimants for a claim, such as an Auto claim
that has multiple exposures.
getClaimantNames(): String[] Returns names of all claimants on a claim as well as
those on related exposures.
getClaimContactsForAllRoles(): ClaimContact[] Gets all ClaimContact entities for all roles.
getContactByRole(role: ContactRole): Contact Gets the contact serving in an exclusive role. If you call
this method on a role that is not exclusive, it throws an
exception.
getContactsByRole(role: ContactRole): Contact[] Gets the directly-related Contact objects in the given
role. This method returns only contacts attached directly
to the entity. It does not return contacts that are
attached to the entity’s subobjects.
Method Description
getContactsByRoles(roles: ContactRole[]): Contact[] Gets the directly related Contact objects with at least
one of the given roles. It is does not return contacts
related to subobjects.
getContactsExcludeRole(role: ContactRole): Contact[] Gets the directly related Contact objects that are not in
the given role. This method returns only contacts
attached directly to the entity. It does not return
contacts attached to the entity’s subobjects.
getContactsExcludeRoles(roles: ContactRole[]): Contact[] Gets directly related Contact objects that are not in any
of the given roles. It does not return Contact objects
related to subobjects.
getContactType(role: ContactRole): IType Gets the type of the specified contact.
setContactByRole(role: ContactRole, contact : Sets the contact for a specified role if the role is Exclusi
Contact): void ve or both Exclusive and Required.
addRole(role: ContactRole,contact: Contact): Adds a role with the specified contact to the entity. Use
ClaimContactRole this method only with the Required or ZeroToMore roles.
For Exclusive roles or for Exclusive & Required roles,
use the explicit setContactByRole method for the role.
If either the role or contact does not exist, this method
does nothing.
removeRole(claimContactRole: ClaimContactRole): void Removes a role from the entity. If the role is the only role
for the associated contact, it attempts to remove the
contact as well. If either the role or contact do not exist
on the entity, this method does nothing.
removeRole(role: ContactRole, contact: Contact): void Removes a role from the entity for this specific contact.
Use this method only with Required or ZeroToMore
roles. For Exclusive roles or the Exclusive & Required
roles, use the other removeRole method. If either the
role or contact does not exist on the entity, this method
does nothing.
Similar methods are also available on the entities Exposure, Incident, and Matter.
Note: In addition to the get methods for Contact entities, there are get methods for ClaimContact entities that
are similar, except that they return ClaimContact entities rather than Contact entities. To see all the methods
associated with these entities, you can use the Gosu API reference. You can also run the Gosu Tester, which is
available in Studio on the Tools menu. In the Gosu Tester, you can declare variables of the various entity types and
use code completion pop-ups (Ctrl+Spacebar) to show you what is available for an entity.
See also
• Gosu Reference Guide
...
<ContactRoleTypeConstraint contactRoleCode="maincontact" contactSubtype="Person"/>
...
<EntityRef entityType="Claim">
...
<RoleRef contactRoleCode="maincontact">
<RoleConstraint constraintType="Exclusive"/>
</RoleRef>
</EntityRef>
...
Whenever you regenerate the Data Dictionary, you see a maincontact property on the Claim that has a foreign key
to the Person contact type.
The system also generates getter and setter methods on the Claim plugin class for this property—in this example, the
getMaincontact and setMaincontact methods. You can also get and set this property using Gosu, for example,
by adding Gosu code to a rule.
...
<ContactRoleTypeConstraint contactRoleCode="arbitrator" contactSubtype="Adjudicator"/>
...
<EntityRef entityType="Claim">
...
<RoleRef contactRoleCode="arbitrationvenue"/>
<RoleRef contactRoleCode="arbitrator"/>
<RoleRef contactRoleCode="assessor"/>
...
</EntityRef>
...
The system generates the array key arbitrator on the Claim entity. The array key points to an array of
Adjudicator contacts.
The system also generates a getter on the entity that enables you to get a list of the contacts in the arbitrator role.
The system does not generate a setter for array properties. To manipulate the array’s contents, use the addRole and
removeRole methods.
See also
• “Adding contact roles” on page 679
• “Add a new contact role: example” on page 688
• “Relationships between contacts” on page 690
<EntityRoleConstraint>
...
<EntityRef entityType="Incident">
<RoleRef contactRoleCode="assessor"/>
<RoleRef contactRoleCode="incidentowner">
<RoleConstraint constraintType="Exclusive"/>
</RoleRef>
...
</EntityRef>
...
<EntityRef entityType="PropertyIncident" superType="Incident">
<RoleRef contactRoleCode="AppraisalSource"/>
<RoleRef contactRoleCode="assessor"/>
...
</EntityRef>
...
<EntityRef entityType="FixedPropertyIncident" superType="PropertyIncident">
<RoleRef contactRoleCode="AppraisalSource"/>
<RoleRef contactRoleCode="assessor"/>
...
</EntityRef>
...
See also
• “About entity role constraints” on page 682
<EntityRoleConstraint>
...
<EntityRef entityType="Exposure">
...
See also
• “About entity role constraints” on page 682
1. In the Project window, also under Extensions→Typelist, double-click the ContactRoleCategory typelist to open it in
the editor.
2. Right-click the Vendors category and click Add new→category to add the following ContactRole:
code typelist
negotiator ContactRole
This step sets up filtering by this particular role for parties involved.
1. In the entityroleconstraints-config.xml file, add the negotiator role, and then add negotiator as a
role reference to the list of Negotiation roles.
a. Press Ctrl+Shift+N and enter entityroleconstraints-config.xml, and then press Enter to edit this file.
b. Add the following ContactRoleTypeConstraint to the section for role constraints at the top of the file:
2. Add the negotiator role with the Exclusive (zero or one interpreter) constraint to the Negotiation entity,
<EntityRef entityType="Negotiation">:
<RoleRef contactRoleCode="negotiator">
<RoleConstraint constraintType="Exclusive"/>
</RoleRef>
gwb genDataDict
8. You also need to quit ClaimCenter Studio and restart it to enable use of the Negotiation.negotiator virtual
property.
9. In the Studio Project window, navigate to configuration→config→Localizations, and then double-click
display_en_US.properties.
10. Add the following display key and value:
NVV.Matter.SubView.MatterNegotiationDetail.General.Negotiator = Negotiator
editable true
id NegotiatorContact
label displaykey.NVV.Matter.SubView.MatterNegotiationDetail.General.Negotiator
required false
value Negotiation.negotiator
claim Negotiation.Claim
Because the Negotiation.negotiator value is a Person, but the valueRange for this field is all Claim contacts, you
must cast the valueRange to be an array of Person objects. If you previously regenerated the Data Dictionary, you
can use it to view the Negotiation entity and the new negotiator field.
1. Navigate to configuration→config→Page Configuration→pcf→planofaction and open ClaimNegotiationDetailsDV.
Repeat the actions of the previous step to add a ClaimContactInput widget after the ClaimContactInput with id
General_NegContact and the same properties.
2. Stop and restart ClaimCenter and then log in again to reload these PCF changes.
3. Open a claim, and then choose Actions→New→Negotiation.
4. Whenever you view the Negotiator field in the New Negotiation window, the system automatically generates a
picker for it:
1. Add a negotiator and enter some information about the negotiation and then save the new negotiation.
2. Click Plan of Action on the left, and then click Negotiations in the blue bar at the top to show the current
negotiations.
3. Select the negotiation you created and look for the Negotiator field, which shows the negotiator you added. You
can click Edit to change the settings for the negotiation, including the Negotiator.
See also
• “Adding contact roles” on page 679
• “How configuring roles impacts entity data and types” on page 684
• “Relationships between contacts” on page 690
IMPORTANT The system relies on these internal relationships. Do not modify or remove the internal contact
relationships. However, you can use a filter attribute to filter these values in a PCF drop-down list.
Procedure
1. If necessary, start ClaimCenter Studio.
a. Open a command prompt and navigate to the ClaimCenter installation directory.
b. Enter the following command:
gwb studio
12. Ensure that your synchronization configuration also has the primary relationship defined as a synchronization
attribute. Add the relationship to Contact as follows:
a. Press CTRL+N and enter RelationshipSyncConfig, and then double-click the class name in the search
results.
b. Add the following chained method call to the init method before the final .create method call:
.includeRelationship(Contact,TC_PRIMARYINSURED,true)
For information on using RelationshipSyncConfig, see the Guidewire Contact Management Guide.
13. Stop ClaimCenter, regenerate the data dictionary, and then restart ClaimCenter, as described in the following
steps. You need to perform all of these steps because the relationship additions cause data model changes to
Contact.
a. Open a command prompt in the ClaimCenter directory and then enter the following command:
gwb stopServer
b. Regenerate the data dictionary to ensure that your changes are correct:
gwb genDataDict
gwb runServer
14. Open ContactManager Studio and fetch updates for the ClaimCenter web service ContactAPI.
a. In the Project window, navigate to configuration→gsrc and then to wsi.remote.gw.webservice.cc.
b. Double click cc900.wsc.
c. Select the resource ${cc}/ws/gw/webservice/cc/cc900/contact/ContactAPI?wsdl.
d. Click Fetch .
Next steps
After completing this procedure, continue to “Test new contact relationship in ClaimCenter” on page 692.
Procedure
1. Log into ClaimCenter as a user that can edit claims.
For example, if using the sample data, use aapplegate/gw.
2. Open an existing claim and open the Parties Involved→Contacts screen.
3. If necessary, add contacts to this screen so that there are at least two contacts.
4. Click the name of one of the contacts to open the Basics card, and then click the Related Contacts card.
5. Click Edit, then Add, and then click the new Name field to add one of the contacts on the list.
6. Under Relation to Contact, click the file and choose Primary Insured from the drop-down list.
7. Click Update to save your changes.
8. In the list of contacts above the Related Contacts card, click the contact you just added as a related contact, and
then click the Related Contacts card for that contact.
That tab shows the first contact you picked and the inverse relationship Secondary Insured.
Next steps
After completing this procedure, continue to “Add new contact relationship to ContactManager” on page 693.
Procedure
1. Start Contact Manager Studio.
a. Open a command prompt and navigate to the Contact Manager installation directory.
b. Enter the following command:
gwb studio
contactBidiRelCode="secondaryinsured"
entity="ABContact" />
</ContactRelationshipPair>
11. Stop Contact Manager, regenerate the data dictionary, and restart Contact Manager, as described in the steps
that follow.
You need to perform all these actions because the relationship additions cause data model changes to
ABContact.
a. If necessary, stop the Contact Manager application:
Open a command prompt in the ContactManager directory and then enter the following command:
gwb stopServer
b. Regenerate the data dictionary to ensure that your changes are correct:
gwb genDataDict
gwb runServer
12. Open ClaimCenter Studio and fetch updates for the ContactManager web service ABContactAPI.
a. In the Project window, navigate to configuration→gsrc and then to wsi.remote.gw.webservice.ab.
b. Double click ab900.wsc.
c. Select the resource ${ab}/ws/gw/webservice/ab/ab900/abcontactapi/ContactAPI?wsdl.
d. Click Fetch .
Next steps
After completing this procedure, continue to “Test new contact relationship in ContactManager” on page 694.
Procedure
1. Log into ClaimCenter as a user such as the sample user ssmith/gw.
2. Open an existing claim and open the Parties Involved→Contacts screen.
3. Click Add existing contact and search for a contact, such as the company Whole Foods from the imported
sample data.
4. Select the contact and add a role so you can add it to the list of contacts for the claim.
5. Click Update to add the contact to the claim.
6. Select the newly added contact and then click the Related Contacts card.
7. Click Edit and then click Add to add a new related contact.
8. Click the drop-down button in the Name field and choose Search from the list, and then search for an existing
contact.
For example, search for the Person with First Name of Eric and Last Name of Andy from the imported sample
data.
694 chapter 50 Configuring roles and relationships
Configuration Guide 9.0.5
Configuring multicurrency
ClaimCenter supports multiple currencies in financial transactions. You can configure ClaimCenter financials to
display as well as use multiple currencies. If multicurrency is enabled, you can view monetary transactions in
different currencies as well as manage reserves, checks, and payments in multiple currencies. You can track and
erode reserves in the currency of choice, avoiding exchange rate fluctuations and their potential impact on reserve
amounts.
This topic describes multicurrency configuration in ClaimCenter.
See also
• Globalization Guide
Set the DefaultApplicationCurrency to the one currency to use, as in the following example:
• Multicurrency display – Determines if ClaimCenter displays multiple currencies. Set this parameter as follows:
• Multicurrency reserving – Determines if you can track reserves and recovery reserves in multiple currencies on a
claim. Set this parameter as follows:
IMPORTANT In the base configuration, multicurrency display and reserving are disabled, and ClaimCenter tracks
all financial transactions in the default application currency.
Default ClaimCenter defines its default currency with the configuration parameter DefaultApplicationCurrency (in
currency config.xml) on server startup.
The term reporting currency also refers to this default currency.
Note: The ExchangeRate entity contains a BaseCurrency typekey. Do not confuse this with the default
currency.
Claim currency The claim’s currency, inherited from the associated policy, which is defined in the Currency typekey field on
the Claim entity.
Reserving Currency of a reserve line, defined by the ReservingCurrency typekey field on the ReserveLine entity.
currency
Transaction ClaimCenter maintains a list of all of the available currencies in the Currency typelist.
currencies
See also
• For information on how ClaimCenter handles multiple currencies, see the Application Guide.
• For information on using methods on ClaimFinancialsAPI that are specific to foreign exchange adjustments,
see the Integration Guide.
Multicurrency Entities
Claim Policy
Currency Currency
Transaction
ExchangeRateSet ExchangeRate
BaseCurrency Currency
MarketRates
PriceCurrency ReservingCurrency
EffectiveDate
ExchangeRateSet TransactionAmount
ExpireDate
TransToClaimExchangeRate
TransToReservingExchangeRate
ClaimToReportingExchangeRate
Legend
A is one-to-
A B one B Transaction is 1 to many TransactionLineItem
A B A is one-to-
many B
A B A extends B
TransactionLineItem
A B A implements B
ClaimAmount
A has foreign key TransactionAmount
A B
to B
ReservingAmount
ReportingAmount
Entity Description
Check Contains an array of Payments. Payment is a subtype of Transaction, so every Payment stores a currency and
two exchange rates. All the payments on a check must have the same currency and exchange rates. For this
reason, the currency for a payment can also be called the check currency. The Check entity does not store a
currency or any exchange rates, but Check does have virtual properties to get the currency and exchange
rates for its payments.
CheckPortion Determines the amount for which a secondary check will be written. For example, a secondary check could be
a check on a multi-payee check that is not the primary check. CheckPortion can indicate that a secondary
check receives either a percentage of the sum of the payments or a fixed amount.
Checks with a CheckPortion do not have any payments, but just receive a percentage or fixed amount of the
Payments in the primary Check of the CheckGroup. CheckPortion cannot have its percentage and fixed
amount fields both populated.
Important fields include:
• FixedTransactionAmount – If set, the amount in the transaction currency that is allocated to this
secondary check.
• FixedClaimAmount – If set, the amount in the claim currency that is allocated to this secondary check.
• FixedReportingAmount – If set, the amount in the reporting currency that is allocated to this secondary
check.
Entity Description
• Percentage – If set, the fraction of the amounts of the payments that are allocated to this secondary
check. Setting this field clears the fixed amount fields.
Deduction Represents a deduction from a check, usually for tax purposes.
Important fields include:
• ClaimAmount – Amount of the deduction in the claim currency.
• TransactionAmount – Amount of the deduction in the transaction currency.
• ReportingAmount – Amount of the deduction i the reporting currency.
Transaction Represents a financial operation. It has the following subtypes: Payment, Recovery, RecoveryReserve, and Re
serve.
Important fields include:
• Currency – Transaction currency.
• TransToReservingExchangeRate – Exchange rate between transaction and reserving currencies that is in
effect for this Transaction.
• TransToClaimExchangeRate – Exchange rate between transaction and claim currencies that is in effect
for this Transaction.
• ClaimToReportingExchangeRate – Exchange rate between claim and reporting currencies that is in effect
for this Transaction. This field is not shown in the user interface in the base configuration.
TransactionL TransactionLineItems provide a means to split the amount of a transaction into multiple categories such as
ineItem Doctor, Hospital, Legal, and so forth. Every transaction has one or more TransactionLineItems, and the
amount of the transaction is the sum of all its line items’ amounts.
Important fields include:
• Deductible – Deductible represented by this TransactionLineItem, if any. Used when deductible
handling is enabled.
• TransactionAmount, ClaimAmount, ReservingAmount, ReportingAmount – Store the amount in the four
currencies. TransactionAmount is also accessible through the Amount virtual property for single currency
implementations.
ExchangeRate Represents an exchange rate between a pair of currencies. This rate can be a market rate, in which case it will
exist in an ExchangeRateSet with rates between every currency pair. It can also be a manually-entered custo
m rate, in which case it typically contains the amount entered by the user and resides alone in an ExchangeRa
teSet.
Important fields include:
• BaseCurrency – The currency from which this exchange rate converts, as in GB pounds.
• PriceCurrency – The currency to which this exchange rate converts, as in Euros.
• Rate – The exchange rate between the two currencies, such as 1.301.
Note: If you are doing a multicurrency implementation, the ExchangeRate table can grow large. This table is
created by default in the ADMIN tablespace, which usually does not have as much room as the main
tablespace. Therefore, this table can cause the ADMIN tablespace to run out of room. After creating the
database schema in a production system, manually migrate this table out of the ADMIN tablespace to the
normal tablespace where more room is usually allocated.
ExchangeRate Represents a set of exchange rates, along with supplemental information about those rates, including the
Set dates the set goes into effect and expires.
The MarketRates field, when true, indicates that the exchange rates are market rates. When this field is fals
e, the set contains only one user-entered custom rate.
Important fields include:
• EffectiveDate – Sets the date and time at which the rate set starts to be in effect.
• ExpireDate – Sets the date and time at which the rate set becomes no longer in effect.
• MarketRates – If set to true, the rate set is included in the search for the latest market rates.
Note: If you are doing a multicurrency implementation, the ExchangeRateSet table can grow large. This table
is created by default in the ADMIN tablespace, which usually does not have as much room as the main
tablespace. Therefore, this table can cause the ADMIN tablespace to run out of room. After creating the
Entity Description
database schema in a production system, manually migrate this table out of the ADMIN tablespace to the
normal tablespace, where more room is usually allocated.
At some future time, the payment's check clears, and the converted claim amount is actually $110, rather than $100.
ClaimCenter applies the foreign exchange adjustment proportionally across all the line-items, resulting in the
following:
ClaimCenter provides methods for foreign exchange adjustments to be made on either a payment-by-payment basis,
or for an entire check at once. In the latter case, the adjustment is split proportionally between all the active
payments on the check (excluding any recoded, offsetting or canceled payments). Then, for each such payment, its
adjustment is split amongst its line-items as discussed in the previous example.
Applying a foreign exchange adjustment to an existing payment or check is equivalent to setting a custom exchange
rate on the payment or payments.
After ClaimCenter applies the foreign exchange adjustment, the calculated values become:
To work with foreign exchange calculations, Guidewire provides three expressions accessible from
gw.api.financials.FinancialsCalculationUtil:
getForeignExchangeAdjustmentsExpression
getErodingPaymentsForeignExchangeAdjustmentsExpression
getNonErodingPaymentsForeignExchangeAdjustmentsExpression
See also
• “Foreign exchange adjustments” on page 701
Check.applyForeignExchangeAdjustment
This method applies a foreign exchange adjustment to this Check's claim currency amount. The parameter
newClaimAmount specifies the new amount for this check in the claim currency. It cannot be null.
The amount of the adjustment is the percentage difference between the new passed-in amount and the current
amount for claim currency. Suppose, for example, that the original check has three payments of $50, $20 and $10 for
a total claim amount of $80, and the new claim amount is $100. Then, every payment will get a 25% offset, making
them $62.50, $25 and $12.50, for a total of $100.
Only use this method on a check that is in a committed but uncanceled state, meaning that the check status must be
one of the following:
• Requesting
• Requested
• Issued
• Cleared
Payment.applyForeignExchangeAdjustment
This method applies a foreign exchange adjustment to this Payment's claim currency amount. The parameter
newClaimAmount specifies the new amount for this payment in the claim currency. It cannot be null.
The amount of the adjustment is the percentage difference between the new passed-in amount and the current
amount for claim currency. Suppose, for example, that the original payment has three line items of $50, $20 and $10
for a total claim amount of $80, and the new claim amount is $100. Then, every line-item will get a 25% offset,
making them $62.50, $25 and $12.50, for a total of $100.
Only use this method on a payment that is an offsetting payment. The payment must also be in a committed but
uncanceled state, meaning that the payment status must be one of the following:
• Submitting
• Submitted
TransactionLineItem fields
ClaimCenter provides the following fields on the TransactionLineItem entity for use with foreign exchange
adjustments:
• ClaimForExAmount
• ReportingForExAmount
It also provides the following fields on the Transaction entity:
• ClaimForExAdjustmentAmount
• ReportingForExAdjustmentAmount
Claim archiving
Archiving is the process of moving a closed claim and associated data from the active ClaimCenter database to a
document storage area. You can still search for and retrieve archived claims, but they occupy less space in the active
database while archived.
Thus:
• To change the amount of time after a claim has been closed before ClaimCenter archives it, edit the
DaysClosedBeforeArchive configuration parameter.
• To change the amount of time after a claim has been retrieved from the archive before ClaimCenter archives the
claim again, edit the DaysRetrievedBeforeArchive configuration parameter.
• To achieve a more fine-grained control over the DateEligibleForArchive property, you can edit one of the
configuration points listed in the previous table or add code elsewhere to modify it.
Procedure
1. Ensure that ClaimCenter is running.
2. In a command prompt, navigate to the ClaimCenter admin/bin directory.
3. Enter one of the following commands to retrieve claims from the archive store.
• Single claim:
• Group of claims:
For these commands, you must supply a username and password (user and password). Parameter file names
a text file that contains a list of claim numbers, separated by new lines. You can also add a comment
(comment) after the -restore command option.
Next steps
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 ClaimCenter 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 ClaimCenter archive domain graph” on page 325
• System Administration Guide
See also
• System Administration Guide
See also
• System Administration Guide
Archive rules
Guidewire provides a set of rules that you can use to implement business logic related to archiving. You can find
these rules in Guidewire Studio in the following location:
configuration→config→Rule Sets→Archive
Through the Archive rules, you can do the following:
• Skip a claim – Skipping a claim during archiving makes that claim temporarily unavailable for archiving during
the current archiving pass.
• Exclude a claim – Excluding a claim from archiving makes that claim unavailable for archiving during this and
future archiving passes.
You can view information about skipped and excluded claims in the Server Tools→Info Pages→Archive Info screen.
This screen lists:
• Total number of claims skipped by the archiving process
• Number of claims excluded because of rules
• Number of claims excluded because of failure
For skipped and excluded claims, you can investigate each individual item. You can also reset any excluded claim so
that the archiving process attempts to archive that claim the next time the archiving process runs.
• Incomplete Review Rule – If the claim has a vendor review that is incomplete, ClaimCenter skips the claim.
• Unsynched Review Rule – If the claim has a vendor review that is not synchronized with Guidewire
ContactManager, ClaimCenter skips the claim.
• Transaction State Rule – If a claim has un-escalated or un-acknowledged transactions, ClaimCenter skips the
claim.
It is possible for you to add your own, additional, archive-related rules to this rule set, or to modify the sample rules
that Guidewire provides. Thus, it is possible to write archiving rules that reflect your unique business conditions. For
example, you can write rules to do the following:
• Do not archive a sensitive claim, or one with restricted access control.
• Do not archive a claim that meets a certain condition, such as having medical payments over some amount.
• Do not archive a claim whose claimant has other open claims pending.
There are additional archiving-related methods, such as Claim.hasReportedArchiveProblem, that are useful in rule
writing.
See also
• Rules Guide
Archive events
Whenever ClaimCenter creates a claim, it also creates a ClaimInfo entity, which is the root of the Claim domain
graph. If a ClaimInfo entity changes, which can happen during claim archiving, retrieval, claim exclusion, and
archive failure, ClaimCenter generates a ClaimInfoChanged event.
See also
• Rules Guide
See also
• 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, ClaimCenter 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 claim and contact data from ClaimCenter. There can
be multiple objects associated with the claim 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.
Obfuscation might be required if destroying the data affects claims that cannot be destroyed. For example, purging
user data for a former employee could affect hundreds or even thousands of claims. Therefore it makes more sense
to obfuscate the data for the user and leave the other data alone.
Note: The PersonalDataDestructionAPI web service checks for both retired and active contacts when a contact
data destruction request is received. When implementing data obfuscation for contacts, you must evaluate the need
to look for related objects that are retired in the database. Retired objects can be obfuscated in the same fashion as
active objects, but must be retrieved from the database with a query that is specified to look for retired objects. For
example: query.withFindRetired(true).
IMPORTANT The external software program that calls the web service must request and verify destruction of data
for a contact in ClaimCenter before requesting that ContactManager destroy the contact. If you have more than one
core application installed, the external application must request that the contact be destroyed in all of them before
sending the request to ContactManager. When ContactManager processes a request to destroy a contact, it first
verifies with all installed core applications that it can destroy the contact. If any core application indicates that the
contact cannot be destroyed, ContactManager does not proceed with the destruction request and notifies the web
service that the contact cannot be destroyed.
See also
• “Defining the destroyer” on page 724
• “Specifying which objects in the graph can be destroyed” on page 726
Note: The destroyUser method is synchronous and initiates obfuscation. It does not use work queues, and
therefore does not participate in the personal data destruction request lifecycle.
If the web service determines that the request is an existing one, it adds the specified requesterID value to the
existing destruction request and does not start a new request.
If the web service determines that the request is a new one, the web service:
1. Does the following depending on whether the request is for an AddressBookUID or PublicID:
• If the web service call was to requestContactRemovalWithABUID, the web service:
◦ Creates a PersonalDataDestructionRequest object for the AddressBookUID.
◦ Adds PersonalDataContactDestructionRequest objects for all related PublicID values, which are
obtained from a call to the PersonalDataDestroyer implementation.
• If the web service call was to requestContactRemovalWithPublicID, the web service:
◦ Creates a PersonalDataContactDestructionRequest object for the PublicID.
◦ Adds a PersonalDataDestructionRequest object if there is a related AddressBookUID obtained from a
call to the PersonalDataDestroyer implementation.
2. Adds a PersonalDataDestructionRequester object using requesterID.
3. The DestroyContactForPersonalData work queue checks for requests in the ReadyToAttemptDestruction
category, status New or ReRun, and calls the Destroyer.
The class PersonalDataContactDestructionWorkQueue, which implements this work queue, calls the
following method:
PersonalDataDestructionController.destroyContact(contactPurgeRequest)
• If the request status is in the DestructionStatusFinished category, the queue marks the date of
destruction for the contact destruction request.
• If the request status is ManualInterventionRequired, you must implement code that notifies the data
protection officer. That user must determine what to do and then set the status to ReRun so the
DestroyContactForPersonalData work queue can run it again.
4. The NotifyExternalSystemForPersonalData work queue looks at all
PersonalDataContactDestructionRequest objects that are associated with a
PersonalDataDestructionRequest. If they all have a status in the category DestructionStatusFinished,
the work queue does the notification.
5. The NotifyExternalSystemForPersonalData work queue notifies the external system by using
PersonalDataDestructionRequester objects. As part of this notification, the work queue calls the
PersonaDataDestruction plugin method notifyExternalSystemsRequestProcessed.
6. The RemoveOldContactDestructionRequest work queue removes all requests that satisfy both of the
following criteria:
• The date obtained by adding the value of the configuration parameter
ContactDestructionRequestAgeForPurgingResults to the value of
PersonalDataContactDestructionRequest.purgedDate is less than or equal to today’s date.
• The PersonalDataContactDestructionRequest object has a typecode that is in the
DestructionStatusFinished category.
ContactDestructionStatus
When a new contact destruction request is started, the initial status of the destruction object is New. These status
values are defined in the ContactDestructionStatus typelist. After a destruction attempt is made on the contact,
the destroyer is expected to return a status corresponding to how much it was able to destroy:
• New – The initial status of the destruction object when a new contact destruction request is started.
• NotDestroyed – Nothing could be destroyed.
• Partial – Some data was destroyed.
Not returned in the base configuration of ClaimCenter.
• Completed – Everything requested was destroyed.
• ManualIntervention – There was an error. This status enables inspection by the Data Protection Officer and
must be set before setting ReRun.
Not returned in the base configuration of ClaimCenter.
In the base configuration, ClaimCenter provides code that notifies the Data Protection Officer in the plugin class
that implements PersonalDataDestruction. Additionally, after the Data Protection Officer takes action, the
method PersonalDataDestructionController.requeueContactRemovalRequestWithPublicID must be
called. You must configure a way to make that method call, such as a button in the ClaimCenter user interface.
• ReRun – Enables another attempt at destruction.
DestructionRequestStatus
You can retrieve the status of the entire destruction request through the Status property on the request itself. These
statuses are defined in the DestructionRequestStatus typelist. The general status of the entire destruction request
can be:
• DoesNotExist – The object to be destroyed does not exist.
• Unprocessed – Everything is still in the New status.
• InProgress – All other combinations of contact destruction statuses.
• Finished – Everything is in a final state.
ContactDestructionStatusCategory
Every ContactDestructionStatus typecode except ManualInterventionRequired has one or more categories.
• DestructionStatusNotProcessed – The request has not gone through the destruction process.
• ReadyToAttemptDestruction – Labels the contact purge request as being ready to be sent to the destroyer.
• DestructionStatusFinished – Indicates that the request has finished the destruction process.
• ReadyToBeNotified – Labels the request as ready to notify to the external system.
New and ReRun are under the category ReadyToAttemptDestruction.
New also is included in the category DestructionStatusNotProcessed.
Partial, NotDestroyed, and Completed are under both the category DestructionStatusFinished and the
category ReadyToBeNotified.
An exception is thrown if return status is New or if you try to change the status from a typecode in the
DestructionStatusFinished category.
Note: The class that implements this work queue is PersonalDataContactDestructionWorkQueue.
PersonalDataDestructionController class
This class handles the complete lifecycle of the asynchronous destruction process after a destruction request has
been made through the PersonalDataDestructionAPI web service. This class attempts to destroy the contact and
notify the requesters that the contact has been destroyed.
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.
In the base configuration of ClaimCenter, the entities Contact, ContactInfo, Claim, and ClaimInfo implement the
DestructionRootPinnable delegate and therefore have DoNotDestroy boolean fields. The default value of the
field is false, which permits destruction of the entity. If this field is set to true, the entity cannot be purged.
You can set this field only for Contact, ContactInfo, and ClaimInfo objects. Use the markDoNotDestroy method
to set the field. For example:
ClaimInfo.markDoNotDestroy(true)
You cannot set this field on a Claim object. In the base configuration, the ClaimCenter personal data destruction
code does not check this field on a claim.
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.
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, UserContact.etx has the following definition:
<extension xmlns="http://guidewire.com/datamodel"
entityName="UserContact">
<implementsInterface
iface="gw.api.obfuscation.Obfuscator"
impl="gw.personaldata.obfuscation.UserContactObfuscator"/>
<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
PersonalDataObfuscator.
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="gw.api.personaldata.Obfuscator"
impl="gw.api.personaldata.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 729
• “Implementing the Obfuscator interface in an entity” on page 728
the kind of obfuscation that will be applied to the field's contents. In the base configuration, two values are defined
in the typelist PersonalDataTagValue.tti:
• ObfuscateDefault – The field's contents are replaced with the default value or null if no default value is
defined.
• ObfuscateUnique – The field's contents are replaced as you define.
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 Contact.etx 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.
• AddressBookConvertible.etx
• GlobalAddress.etx
• GlobalAddress.Global.etx
• GlobalContactName.etx
• GlobalContactName.Global.etx
• GlobalPersonName.etx
• GlobalPersonName.Global.etx
See also
• For a list of entities that implement Obfuscator, see “Implementing the Obfuscator interface in an entity” on
page 728
Insured or Claimant have ContactInfo data created. This data can be used for simple searches and other user
interface purposes.
See also
• “The ClaimCenter archive domain graph” on page 325
• “Delegate data objects” on page 182
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.
In the base configuration, the class that implements the PersonalDataDestruction plugin interface,
CCPersonalDataDestructionSafePlugin, overrides the notifyDataProtectionOfficer method. In this class,
the notifyDataProtectionOfficer method logs messages to the system console if a destruction request fails. You
can configure where these messages are logged as needed.
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 722
• “Data obfuscation in ClaimCenter” on page 727
See also
• “Defining the destroyer” on page 724
• “Entity domain graphs” on page 722
• “Claim purging and the archive domain graph” on page 328
translateABUIDToPublicIDs
This public method overrides the PersonalDataDestroyer interface method translateABUIDtoPublicIDs. It
finds all the contacts related to the AddressBookUID and all archived contacts as well, and returns a list the
PublicID values for those contact.
The method is called by the web service PersonalDataDestructionAPI. The web service uses the method to
determine if an AddressBookUID exists and to get the PublicID if the original destruction request was specified by
AddressBookUID.
PersonalDataPurge event
When a personal data purge of certain objects is committed, ClaimCenter 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.
ClaimCenter generates a PersonalDataPurge event when a ClaimInfo purge is committed as part of a personal
data purge. In the base configuration, there is no rule that responds to this event, but you can create an EventFired
rule in the EventMessage rule set category that sends a message.
Your rule could take the following form in the Guidewire Studio Rules editor:
USES:
uses gw.api.locale.DisplayKey
See also
• Rules Guide
PersonalDataDisposition shouldDestroyRoot(
Pinnable root, Collection<Pinnable> descendants, Pinnable origin);
PersonalDataDisposition shouldDestroyUser(UserContact userContact);
void notifyDataProtectionOfficer(Pinnable root, String title, String message, Date dateOfError);
void notifyExternalSystemsContactHasBeenPurged(
String AddressBookUID, String requestor, String requestID);
PersonalDataPurgeContext createContext(PersonalDataPurgeContext context);
void prepareForPurge(PersonalDataPurgeContext context);
void postPurge(PersonalDataPurgeContext context);
PersonalDataDestroyer getDestroyer();
In the base configuration, ClaimCenter registers the CCPersonalDataDestructionSafePlugin 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 CCPersonalDataDestructionSamplePlugin class.
See also
• “Personal data destruction plugin implementation classes” on page 726
• “Entity domain graphs” on page 722
CCPersonalDataDestructionSafePlugin
In the base configuration, CCPersonalDataDestructionSafePlugin calls getDestroyer to obtain the destroyer
defined in CCPersonalDataDestroyer. Additionally, this class prevents data destruction by returning
MUST_NOT_DESTROY for all calls to destroy pinnable root entities. For example:
return MUST_NOT_DESTROY
}
override function shouldDestroyUser(
userContact: UserContact): PersonalDataDisposition {
CCPersonalDataLogUtil.logNotDestroyed(
userContact, "Safe plugin implementation always returns MUST_NOT_DESTROY")
return MUST_NOT_DESTROY
}
CCPersonalDataDestructionSamplePlugin
You can use the class CCPersonalDataDestructionSamplePlugin as a guide for writing your own personal data
destruction code. This class has examples that can return values other than MUST_NOT_DESTROY for a pinnable root
entity.
Some examples:
• The class respects the setting of the DoNotDestroy field. For example, it does not destroy a Contact if
DoNotDestroy is set to true.
• If a claim has been closed for at least two years, it can be purged.
• If a claim is archived, it can be purged.
• If a claim cannot be found, MustNotDestroy is returned. For example:
◦ The Contact is a BulkInvoice payee.
◦ The Contact exists only as a related contact without its own role on a claim.
◦ The Contact is an orphan—has no connection to a claim or any other object.
See also
• “Do Not Destroy flag” on page 718
• “Identifying archived objects that affect destruction of data” on page 722
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 ClaimCenter configuration capabilities. In your obfuscation implementation, you must take into
account how your custom obfuscation might affect existing processes in ClaimCenter.
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.
The entities that have Obfuscator implementations that support obfuscation are:
• Credential – CredentialDefaultObfuscator
Has fields and typekeys marked PersonalData.
• OfficialID – DefaultPersonalDataObfuscator
Has fields and typekeys marked PersonalData.
• User – UserObfuscator
Has fields and typekeys marked PersonalData.
• UserContact – UserObfuscator.
This entity is a subtype of Person, which is a subtype of Contact. It inherits the Contact implementation of the
Obfuscatable delegate and overrides the Contact implementation of the Obfuscator interface. In the base
configuration, the EmployeeNumber field is marked PersonalData.
The following entities implement the Obfuscatable delegate, and in the base configuration their Obfuscator
interface implementation is UnsupportedObfuscator:
• Address
• Contact – Has fields and typekeys that are marked PersonalData.
• ContactCategoryScore
• Person – Inherits obfuscation settings from Contact. Has fields and typekeys that are marked PersonalData.
See also
• “Obfuscator interface” on page 720
PersonalDataObfuscator
DefaultPersonalDataObfuscator
UserContactLinkedObfuscator
Legend
UserObfuscator UserContactObfuscator
A B A is a subclass of B
DefaultPersonalDataObfuscator and its subclasses define base configuration behavior to enable obfuscating
User, UserContact, and Credential and related objects. For example:
• UserContactLinkedObfuscator overrides the shouldObfuscate method. That method calls the
shouldDestroyUser method defined in the PersonalDataDestruction plugin to get the setting for
UserContact. For example, in the base configuration the setting is MUST_NOT_DESTROY.
• UserDefaultObfuscator overrides a beforeObfuscate method. That method throws an exception if the user’s
credential is active because that means the user is still active. If the user is not active, the method calls
Data obfuscation in ClaimCenter 729
Configuration Guide 9.0.5
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.
PersonalDataObfuscator handles setting the obfuscation for marked 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.
◦ 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
ObfuscatablePublicMethod.setObfuscated.
• obfuscateSimple – Works the same as obfuscate.
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 720
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, gw.personaldata.obfuscation.
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 720
This topic explains the data model and financial values managed by the ClaimCenter Financials. It explains how to
configure both the financials behavior and the ClaimCenter interface to better match your business practices.
RecoveryReserve An entity that records the amount of future expected recoveries. It is a subtype of Transaction.
Reserve An entity that records a potential liability. It is a subtype of Transaction. A Reserve designates money
to be set aside for payments. Typically, a reserve is set soon after a claim is made.
ReserveLine An entity with a unique combination of Claim, Exposure, CostType, and CostCategory fields. Only E
xposure can be null. Reserves or recovery reserves are created, or payments are made, or recoveries
are applied against one ReserveLine.
Transaction An entity that represents a financial transaction for a particular claim or exposure. It also contains a
non-empty array of TransactionLineItem entities.
Transaction is an abstract supertype. The ClaimCenter interface uses its subtypes:
• Reserve
• Payment
• RecoveryReserve
• Recovery
These subtypes are final. Transaction must not be subtyped further. A new subtype will not function
correctly, may interfere with existing code and is not supported.
Every transaction is made against a single ReserveLine object.
TransactionLineIte An entity in every transaction that contains the amount of the transaction. Payment and Recovery
m transactions can have more than one Transaction Line Item. Use the LineCategory and Comments
fields to describe a given Transaction Line Item’s contribution to the total transaction amount.
TransactionOnset This join entity contains a foreign key to the Transaction entity and represents the relationship
between a transaction and its onset. It links a Transferred or Recoded transaction (Payment or
Recovery) to its new onset transaction.
TransactionOffset This join entity contains a foreign key to the Transaction entity and represents the relationship
between a transaction and its Offset. It links a Voided, Stopped, Recoded, or Transferred transaction
(Payment or Recovery) to its new onset transaction.
TransactionSet A collection of all transactions made at the same time and approved together. This collection can be,
for example, a check and all the payments it makes.
TransactionSet is an abstract supertype. The ClaimCenter interface uses the following subtypes of Tr
ansactionSet:
• ReserveSet
• CheckSet
• RecoveryReserveSet
• RecoverySet
CheckSet is a subtype of TransactionSet. A check is not a Transaction. The checks in the set, while
created at the same time, can be issued at different times and to different payees. You can also
associate documents with a TransactionSet.
All transactions (and checks) in a Transaction Set must be:
• Approved together
• Rejected together
• In Pending Approval status together
Financials-related typelists
The following typlists contain values that you can modify to manipulate the financial configuration in your
ClaimCenter installation:
Typelist Description
BankAccount Lists bank accounts available from the ClaimCenter interface.
BiValidationAlertType Lists the possible alert types returned from the bulk invoice validation plugin.
CheckBatching ClaimCenter populates the Check Batching drop-down list on the check wizard from this list.
Note: The bulkcheck typecode on this typelist has nothing to do with Bulk Invoices.
CheckHandlingInstructions Specifies handling instructions for a check. ClaimCenter populates the Check Instructions drop-
down list on the check wizard from this list.
CostCategory Categories for different costs associated with financial transactions.
CostType Defines different costs associated with your business. ClaimCenter uses the values in this
typelist as a key filter for the CostCategory typelist.
CoverageType Types of coverage available on a claim. ClaimCenter uses the values in this typelist as a key
filter for the CostCategory typelist.
DeductionType Types of deductions that can appear on a check. The typical use for this typelist is to categorize
both a Deduction entity and a secondary check on a multipayee check.
FinancialSearchField Search fields used while searching for checks or recoveries.
LineCategory Populates the Category drop-down on the Payment Information page of the check wizard. Use to
categorize the Amount of a Transaction Line Item.
PaymentMethod Requested payment method for all payments in a check. For example, use to set whether to
send the check as a paper check or EFT.
Submitted Transactions
Submitted transactions are a subset of Approved transactions. A transaction is considered to be Submitted if its
Status is any of the following:
Approved Transactions
A transaction is considered to be Approved if its Status is any of the following:
See also
• Application Guide
• AllowMultipleLineItems • ExchangeRatesCacheRefreshIntervalSecs
• AllowMultiplePayments • Financials
• AllowNegativeManualChecks • MulticurrencyDisplayMode
• AllowNoPriorPaymentSupplement • PaymentLogThreshold
• AllowPaymentsExceedReservesLimits • PaymentRoundingMode
• CheckAuthorityLimits • ReserveRoundingMode
• CloseClaimAfterFinalPayment • SetReservesByTotalIncurred
• CloseExposureAfterFinalPayment • UseDeductibleHandling
• DefaultApplicationCurrency • UseRecoveryReserves
• DefaultRoundingMode
See also
• “Financial parameters” on page 66 for a discussion of the parameters related to financials.
You can also create a Gosu rule to escalate a check by using the Check.requestCheck method.
Note: If entering the date for escalation, enter a day only but not a time. If a time is present, the batch process
delays escalation until the first time it runs on the next day.
IMPORTANT The taccountesc batch process works with the T-account balances and the calculated financials
values that depend on these balances. It ensures that these balances are correct during the interval between
midnight and the first scheduled execution of the financialsesc batch process for the day. Guidewire
recommends that you schedule the taccountesc batch process to run as close to just-past midnight as possible and
before the financialsesc batch process.
Note: Do not schedule the bulkinvoiceesc process to run at the same time as the financialsesc process.
Running these two at the same time makes both processes take much longer than necessary to complete.
This topic describes the financial calculation APIs that Guidewire provides in Guidewire ClaimCenter.
See also
• “Creating financial transactions” on page 759
gw.api.financials
Two sets of different classes are available for use with financial calculations—FinancialsCalculations and
FinancialsCalculationUtil. Both classes contain methods with similar names, but note that they have different
return types.
gw.api.financials.* Returns
FinancialsCalculations • FinancialsCalculator objects
Sample methods
• getFinancialsCalculation(FinancialsExpression)
• getFuturePayments
• getSubmittedOpenReserves
FinancialsExpression A composite FinancialsExpression provides a building block for custom financial calculations.
You can construct a custom expression by adding or subtracting FinancialsExpression
instances. The resulting custom expression can then be used to create a new FinancialsCalcula
tion to retrieve a calculated amount.
You can wrap a FinancialsExpression in a FinancialsCalculator object in order to evaluate
its amount.
Sample methods
• minus(FinancialsExpression)
• plus(FinancialsExpression)
See also
• “Obtaining calculated amounts” on page 745
• “Retrieving transaction IDs” on page 754
• “Financial calculations with a negative value” on page 755
gw.api.financials.FinancialsCalculations.getAvailableReserves
The following classes provide methods that you can use to work with financial calculations:
• gw.api.financials.FinancialsCalculations
• gw.api.financials.FinancialCalculationUtil
In some cases, they appear to duplicate each other. The difference, however, is in the object that each method
returns. Some return a FinancialsCalculation object and others return a FinancialsCalculator object.
Guidewire recommends the you primarily use the FinancialsCalculations methods that return a
FinancialsCalculator object. Use the methods that return a FinancialsExpression object only if you want to
combine these objects to produce custom expressions from which you can obtain the desired value.
If there are multiple versions of a method, then choose the version that returns the type of object that you need.
Generally, you use the predefined financial calculations that Guidewire provides in the base configuration. However,
it is possible to define your own financial calculations out of the set of financial calculations that Guidewire
provides.
See also
• “Financial calculations with a negative value” on page 755.
gw.api.financials.FinancialsCalculations.getFinancialsCalculation(expression : FinancialExpression)
You can also wrap a FinancialsCalculation object within a FinancialsCalculator object, for example:
FinancialsCalculator.onCalculation(someFinancialsCalculation)
Property Type
Amount CurrencyAmount
ReportingAmount CurrencyAmount
TransactionIds Key[]
To obtain the actual value of the calculation on this financial expression, use the Amount or ReportingAmount
property on the FinancialsCalculator object, for example:
gw.api.financials.FinancialsCalculations.getTotalIncurredGross()
.withClaim( claim )
.Amount
gw.api.financials.FinancialsCalculations.getOpenReserves()
.withClaim(clm)
.Amount
Example 2. The following example calculation returns the amount of Open Reserves for the passed-in Exposure
and CostType values only. It returns only those reserves and payments coded to this exposure and cost type,
regardless of cost category coding.
gw.api.financials.FinancialsCalculations.getOpenReserves()
.withExposure(exp)
.withCostType(cType)
.Amount
Note: Review the ClaimCenter GosuDoc on these methods for more details on how they work.
gw.api.financials.* Returns
FinancialsCalculationU • FinancialsCalculation objects
til Sample methods
• getFinancialsCalculation(FinancialsExpression)
• getFuturePayments
• getOpenReserves
FinancialsExpression A composite FinancialsExpression provides a building block for custom financial calculations.
You can construct a custom expression by adding or subtracting FinancialsExpression
instances. The resulting custom expression can then be used to create a new FinancialsCalcul
ation to retrieve a calculated amount.
You can wrap a FinancialsExpression in a FinancialsCalculation object in order to evaluate
its amount.
Sample methods
• minus(FinancialsExpression)
• plus(FinancialsExpression)
See also
• “Financial calculations with a negative value” on page 755
FinancialsCalculations.getAvailableReserves()
.withClaim(claim)
.withExposure(exposure)
.withCostCategory(costCategory)
.Amount
Notice that you must add individual filtering calls to the Gosu expression to filter the reserve lines that ClaimCenter
includes in the calculation total.
FinancialsCalculationUtil.getAvailableReserves().getAmount(claim, costCategory)
FinancialsCalculationUtil.getAvailableReserves().getAmount(claim, exposure, costType, costCategory)
...
Notice that the getAmount method filters the reserve lines that ClaimCenter includes in the calculation total.
//Example 1
gw.api.financials.FinancialsCalculationUtil.getTotalIncurredNetRecoveriesExpression()
.minus(gw.api.financials.FinancialsCalculationUtil.getOpenRecoveryReservesExpression() )
//Example 2
gw.api.financials.FinancialsCalculationUtil.getGrossTotalIncurredExpression()
.minus(gw.api.financials.FinancialsCalculationUtil.getTotalRecoveryReservesExpression() )
In either case, the method returns a new FinancialsExpression instance that is equivalent to the
TotalIncurredNetRecoveryReserves expression.
However, to be useful, you need to obtain a calculated value for the financial expression. To do this, you must
generate an instance of a FinancialCalculator object that is backed by this custom expression. This is done with a
specialized method on gw.api.financials.FinancialsCalculations that returns the required
FinancialCalculator object:
gw.api.financials.FinancialsCalculations.getFinancialsCalculation(FinancialExpression)
Thus, to generate a FinancialCalculation for the example FinancialExpression, you would use:
uses gw.api.financials.*
package util.financials;
uses gw.api.financials.FinancialsCalculation
uses gw.api.financials.FinancialsCalculationUtil
@Export
class CustomCalcs {
construct() { }
private static var calcMyTotalIncurredNet =
FinancialsCalculationUtil.getFinancialsCalculation(FinancialsCalculationUtil
.getGrossTotalIncurredExpression()
.minus( FinancialsCalculationUtil.getTotalRecoveryReservesExpression() ))
This Gosu class defines the custom calculation as a static property. As such, you need to access the property on the
class itself, not an instance of the class. In other words, you do not need to construct an instance of the class using
the new operator to access the property. In fact, any attempt to do so is a mistake.
You reference the example class by using the following syntax:
The base configuration sample rules show an example usage of the Guidewire-provided
util.financials.CustomCalcs class in the Transaction Approval rule set. Since MyTotalIncurredNet is merely
an instance of a FinancialCalculator object, the getAmount method works as described previously for the
predefined calculations. Guidewire disables the sample rule that uses the CustomCalcs class in the base
configuration.
Condition
TransactionSet.Subtype == "CheckSet"
Actions
Payment calculations
In the base configuration, ClaimCenter provides the following calculations related to payments.
Calculated values
TotalPayments
Sum of all submitted and awaiting submission payments whose scheduled send date is today or earlier.
Access using:
FinancialsCalculations.getTotalPayments()
FuturePayments
Sum of all future payments (for example, those approved payments whose scheduled send date is after today). This includes
both eroding and non-eroding payments.
Access using:
FinancialsCalculations.getFuturePayments()
PendingApprovalPayments
PendingApprovalErodingPayments
PendingApprovalNonErodingPayments
PaymentsForExAdjustments
Total foreign exchange adjustments for both eroding and non-eroding payments
ErodingPaymentsForExAdjustments
NonErodingPaymentsForExAdjustments
Calculated values
Total foreign exchange adjustments for non-eroding payments only.
Access using some variant of the following:
FinancialsCalculations.getFinancialsCalculation(FinancialsCalculationUtil.
NonErodingPaymentsForeignExchangeAdjustmentsExpression)
Reserve calculations
In the base configuration, ClaimCenter provides the following calculations related to reserves.
Sum of all submitted reserves and reserves that are awaiting submission.
Access using:
FinancialsCalculations.getTotalReserves()
AwaitingSubmissionReserves
PendingApprovalReserves
OpenReserves
RemainingReserves
AvailableReserves
Recovery calculations
In the base configuration, ClaimCenter provides the following calculations related to recoveries.
TotalRecoveryReserves
TotalIncurredGross
Open Reserves plus Total Payments, plus foreign exchange adjustments (described next in the detailed description),
equivalent to Total Reserve plus Total NonEroding Payments plus foreign exchange adjustments described next.
Detailed description:
Sum of remaining reserves plus pending reserves plus noneroding payments plus awaiting submission noneroding payments
plus foreign exchange adjustment for eroding payments plus foreign exchange adjustment for noneroding payments.
Access using some variant of the following:
FinancialsCalculations.getFinancialsCalculation(FinancialsCalculationUtil.
GrossTotalIncurredExpression)
TotalIncurredNetRecoveries
TotalIncurredNetRecoveryReserves
Calculated values
AvailableReserves
AwaitingSubmissionReserves
OpenRecoveryReserves
OpenReserves
PendingApprovalReserves
Sum of all reserves that are pending approval.
Access using:
FinancialsCalculations.getFloatingFinancials().PendingApprovalReserves
RemainingReserves
SubmittedOpenReserves
TotalIncurredGross
Sum of all open reserves and total payments.
Access using:
FinancialsCalculations.getFloatingFinancials().TotalIncurredGross
TotalIncurredNet
Calculated values
Sum of all open reserves and total payments minus total recoveries.
Access using:
FinancialsCalculations.getFloatingFinancials().TotalIncurredNet
TotalIncurredNetMinusOpenRecoveryReserves
Sum of all open reserves and total payments minus all open recovery reserves.
Access using:
FinancialsCalculations.getFloatingFinancials().TotalIncurredNetMinusOpenRecoveryReserves
TotalRecoveryReserves
SubmittedTotalIncurredNet
Sum of all open reserves
Reserves + Payments Submitted - Total Recoveries
Access using:
FinancialsCalculations.getFloatingFinancials().SubmittedTotalIncurredNet
See also
• “Using floating financial calculations” on page 756.
Calculation Description
RITotalReinsurance Sum of RI ceded reserves plus RI total recoverables.
Access using:
FinancialsCalculations.getRITotalReinsurance()
RINetNetPayments Net payments (defined as total payments minus total recoveries) minus RI total recoverables.
Access using:
FinancialsCalculations.getRINetNetPayments()
Calculation Description
RISubmittedNetNetReserves Submitted open reserves minus RI open ceded reserves.
Access using:
FinancialsCalculations.getRISubmittedNetNetReserves()
RISubmittedNetNetPayments Submitted net payments (defined as total payments minus total recoveries) minus RI total
recoverables.
Access using:
FinancialsCalculations.getRISubmittedNetNetPayments()
Calculation Description
RITotalCededReservesAdjustments Committed ceded reserve adjustments.
Access using:
FinancialsCalculations.getRITotalCededReservesAdjustments()
Calculation Description
RITotalRecoverables Total recoverables.
Access using:
FinancialsCalculations.getRITotalRecoverables()
following returns the IDs of all transaction objects that contribute to the open reserves calculated values (reserves
and payments).
gw.api.financials.FinancialsCalculations.getOpenReserves().TransactionIds
Again, it is possible to link multiple FinancialsCalculator methods together to uniquely identify the open
reserves to include. For example:
• If you pass in only the claim, then the method returns the IDs of all the transactions that contribute to the Open
Reserves for the entire claim.
gw.api.financials.FinancialsCalculations.getOpenReserves().withClaim(clm).TransactionIds
• If you use a version that takes an exposure only, then it returns the IDs of all the transactions that contribute to
Open Reserves for that exposure only. It does not return the IDs of transactions for other exposures on the same
claim.
gw.api.financials.FinancialsCalculations.getOpenReserves().withExposure(exp).TransactionIds
You can construct other versions of these methods that allow you to account only for certain Cost Types and/or Cost
Categories, for example.
Financial Component Transaction Amount Reserving Amount Claim Amount Reporting Amount
Reserve 100 GBP 100 GBP 120 EUR 168 USD
Payment 10 GBP 10 GBP 12 EUR 16.8 USD
Available Reserves 100-10 = 90 GBP 120 -12 168 -16.8
= 108 EUR = 151.2 USD
The values used in the equation are in the corresponding currencies—reserving, claim, or reporting. The calculations
in this step access the FinancialsCalculations class, calling FinancialsCalculations.
getAvailableReserves(), to arrive at these values.
1. The FloatingFinancialsCalcuations API can be used when you need to calculate available reserves based
on current market rates rather than rates that were in force when the reserves were created.
On February 1, 2014, assume the market exchange rates have changed, as follows.
• GBP to EUR—1.1
• EUR to USD—1.3
• GBP to USD—1.45
ClaimCenter accesses the FloatingFinancialsCalculations class, calling
FinancialsCalculations.getFloatingFinancials().getAvailableReserves(), with the following results.
Financial Component Transaction Amount Reserving Amount Claim Amount Reporting Amount
Reserve 100 GBP 100 GBP 120 EUR 168 USD
Payment 10 GBP 10 GBP 12 EUR 16.8 USD
Available Reserves 100-10 = 90 GBP 120 -12 = 108 EUR 168 -16.8 = 151.2 USD
Available Reserves (Floating) 100-10 = 90 GBP (100 - 10) * 1.1 (100 - 10) * 1.45
= 99 EUR = 130.5 USD
In the preceding table, the Available Reserves row shows the calculated amounts based on the exchange rates stored
in the system when the transactions were created. The Available Reserves (Floating) row shows the calculated
amounts with reserves updated to the latest exchange rates available in the system.
For example:
In the Financials Summary screen, you can view amounts using market rates, that is, floating financial calculations.
See the Application Guide.
1. On February 20, 2014, a recovery is received for the amount of 5 pounds.
The exchange rates in ClaimCenter, dated February 1, 2014, are:
• GBP to EUR—1.1
• EUR to USD—1.3
• GBP to USD—1.45
The Total Incurred Net row shows the calculated amounts based on the exchange rates stored in the system when the
transactions were created. The Total Incurred Net (Floating) row shows the calculated amounts with reserves
updated to the latest exchange rates available in the system.
For example
Total Incurred Net (Floating) in Reporting Currency = ( (Open Reserves in Reserve Currency
* Exchange Rate to Reporting Currency) + Total Payments) - Total Recoveries
= ( (100 - 10) * 1.45) + 16.8 - 7.15 = 140.15 USD
Note: ClaimCenter only applies floating calculations to reserves and recovery reserves.
See also
• “Predefined financial calculations” on page 749.
• “The financials data model” on page 735
• Application Guide
This topic describes how to use the financial calculation APIs that create various kinds of transactions in
ClaimCenter.
See also
• “ClaimCenter financial calculations” on page 743
Setting reserves
You read (retrieve) the values for Available Reserves by using the following static method, which returns a
FinancialsCalculator object:
gw.api.financials.FinancialsCalculations.getAvailableReserves
Available reserves are similar to open reserves except that they include pending approval and future eroding
payments. Thus, they are the sum of all submitted and awaiting submission reserves minus the sum of all approved
eroding payments and all pending approval eroding payments.
See also
• The definition of Available Reserves at “Reserve calculations” on page 750
The method sets the available reserves for an exposure or claim to the given amount by creating a new reserve
transaction that increases or decreases the currently available reserves.
Executing the setAvailableReserves method from a Gosu rule provides significantly different behavior than
performing the equivalent action through the ClaimCenter interface. If you execute this method as part of a rule:
• The method creates a separate ReserveSet object.
• The method ignores any existing reserve set objects for the giving ReserveLine that have a status of Pending
Approval.
The setAvailableReserves method takes the following parameters:
Parameter Description
costType The cost type for the reserve. This value cannot be null, but it can be unspecified.
costCategory The cost category for the reserve. This value cannot be null, but it can be unspecified.
amount The amount to which to set the available reserves. The amount must be zero or greater, and cannot be
negative.
submittingUser User submitting this reserve.
This method sets the available reserves for this reserve line to the given amount by creating a new reserve
transaction that increases or decreases the currently available reserves. It creates reserves in the same reserving
currency as the reserve line.
The method takes the following parameters:
Parameter Description
newReserveAmount The amount to which to set the new reserve. The amount must be non-null and zero or greater, and
cannot be negative.
submittingUser User submitting this recovery reserve.
See also
• “Available reserves method on reserve line objects” on page 760
reserveSet.prepareForCommit()
The newReserve method returns the new transaction entity so that you can modify it. At minimum, you must call
the addNewLineItem method to add a TransactionLineItem with the Amount of the transaction. You can also
create a multicurrency Reserve transaction by modifying the Currency field on the transaction.
After you finish creating transactions, call the ReserveSet.prepareForCommit method to submit the reserve set for
approval and to update the financial calculations. After calling the prepareForCommit method, it is not possible to
modify the transaction amount, currency, exchange rates, or other key fields on the transaction.
See also
• “Setting reserves” on page 759
The CheckCreator methods start typically with with and provide a way for you to specify parameters such as the
cost type or the mail-to-address of the check. For example:
CheckCreator.withPayee(payee)
.withPayeeRole(payeeRole)
.withRecipient(recipient)
.withMailingAddress(mailingAddress)
.withReportabilityType(reportabilityType)
.withCostType(costType)
...
The following example illustrates how to create a new CheckCreator object and pass in various parameters. You
need, of course, to define or to retrieve values for each of the supplied parameters.
claimCheck.withPayee(payee)
.withPayeeRole(payeeRole)
.withRecipient(recipient)
.withMailingAddress(mailingAddress)
.withReportabilityType(reportabilityType)
.withCostType(costType)
.withCostCategory(costCategory)
.withPaymentType(paymentType)
.withLineCategory(lineCategory)
.withCheckAmount(checkAmount)
.withComments(comments)
.withMemo(memo)
.withPayTo(payTo)
.withScheduledSendDate(scheduledSendDate)
.withRequestingUser(requestingUser)
In actual practice, you need supply only those parameters that meet your business needs. However, at a minimum,
supply valid values for the following Check parameters. You cannot leave these values null.
• Payee
• PayeeRole
• CostType
• CostCategory
• PaymentType
• CheckAmount
• ScheduledSendDate
In a similar manner, you can create a check for an exposure. The following examples illustrate how to do this.
exposure.newCheckCreator().withPayee(payee)
.withPayeeRole(payeeRole)
.withRecipient(recipient)
.withMailingAddress(mailingAddress)
.withReportabilityType(reportabilityType)
.withCostType(costType)
.withCostCategory(costCategory)
...
After you create a CheckCreator object, you then use one of the following methods on CheckCreator to create the
check:
var cc = exp.newCheckCreator().withPayee(payee1)
.withPayeeRole("checkpayee")
.withCostType("claimcost")
.withCostCategory("autoglass")
.withPaymentType("final")
.withCheckAmount(100.00)
.withScheduledSendDate("2012-01-31" as java.util.Date)
Notes
• A check with an eroding payment must have reserves already created, so it can erode the available reserves. This
case is the typical one.
• You can create the check with a non-eroding payment, which does not require a reserve.
• In the case of claims created using the First and Final wizard, the eroding payment is both the first and the final
payment on a reserve line. It does not need reserves for simple claims like auto glass claims. An offset reserve is
created automatically for a first and final payment.
See also
• “Setting reserves” on page 759.
• The Gosu API reference for the latest information on Gosu types and methods. See the Gosu Reference Guide.
• Application Guide
Object See…
Claim “Claim objects” on page 764
Exposure “Exposure objects” on page 764
RecoverySet “Creating recoveries directly” on page 764
Claim objects
The following example illustrates how to create a recovery on a claim. You need to define or retrieve values for each
of the supplied parameters. Also, you need to supply only those parameters that meet your business needs.
claim.createRecovery( payer,
costType,
costCategory,
recoveryCategory,
lineCategory,
recoveryAmount,
recoveryCurrency,
exchangeRateOverride,
customExchangeRateDescription,
claimAmountOverride,
reportingAmountOverride,
comments,
requestingUser )
Exposure objects
The following example illustrates how to create a recovery on an exposure.
exp.createRecovery( payer,
costType,
costCategory,
recoveryCategory,
lineCategory,
recoveryAmount,
comments,
requestingUser )
recoverySet.prepareForCommit()
The newRecovery method returns the new transaction entity so that you can modify it. At the minimum, you must
call the addNewLineItem method to add a TransactionLineItem with the Amount of the transaction. You can also
create a multicurrency Recovery transaction by modifying the Currency field on the transaction.
After you finish creating transactions, call the RecoverySet.prepareForCommit method to submit the recovery set
for approval and to update the financial calculations. After calling the prepareForCommit method, it is not possible
to modify the transaction amount, currency, exchange rates, or other key fields on the transaction.
gw.api.financials.FinancialsCalculations.getOpenRecoveryReserves
The Open Recovery Reserves calculation, Total Recovery Reserves minus Total Recoveries, is analogous to
payments decreasing open reserves. After a recovery is received, it decreases the open recovery reserve associated
with that reserve line.
See also
• Application Guide
setOpenRecoveryReserves
To set recovery reserve values, you must call setOpenRecoveryReserves directly on one of the following:
• Claim
• Exposure
The following code shows the method parameters:
The method sets the open recovery reserves for an exposure or claim to the given amount. It does so by creating a
new recovery reserve transaction that increases or decreases the current open recovery reserves. The method takes
the following parameters:
Parameter Description
costType The cost type for the reserve. This value cannot be null, but it can be unspecified.
costCategory The cost category for the reserve. This value cannot be null, but it can be unspecified.
recoveryCategory The recovery category for the recovery reserve. This value cannot be null.
newRecoveryReserveAmount The amount to which to set the open recovery reserves. The amount must be non-null and zero
or greater, and cannot be negative.
submittingUser User submitting this recovery reserve.
This method sets the open recovery reserves for this reserve line to the given amount in the reserving currency. It
creates a recovery reserve that increases or decreases the current open recovery reserves. It returns the new recovery
reserve, or null if the recovery reserve is not created.
The method takes the following parameters:
Parameter Description
recoveryCategory The recovery category for the recovery reserve. This value cannot be null.
newRecoveryReserveAmount The amount to which to set the open recovery reserves. The amount must be non-null and zero
or greater, and cannot be negative
submittingUser User submitting this recovery reserve.
recoveryReserveSet.prepareForCommit()
The newRecoveryReserve method returns the new transaction entity so that you can modify it. At minimum, you
must call the addNewLineItem method to add a TransactionLineItem with the Amount of the transaction. You can
also create a multicurrency recovery reserve transaction by modifying the Currency field on the transaction.
After you finish creating transactions, call the RecoveryReserveSet.prepareForCommit method to submit the
reserve set for approval and to update the financial calculations. After calling the prepareForCommit method, it is
not possible to modify the transaction amount, currency, exchange rates, or other key fields on the transaction.
This topic discusses how you can modify various ClaimCenter screens related to financials. It is also discusses how
to configure financial holds and bulk invoice payments.
ClaimFinancialsSummary Defines the summary tab. You modify this page to change the contents of the drop-down
that filters available options at the top of the screen.
FinancialsSummaryLV Defines the list view that shows in the ClaimFinancialsSummary screen.
FinancialsSummaryPanelSet.M Defines a model PCF that corresponds to an item in the drop-down filter. ClaimCenter
ode renders a separate Shared Section panel (distinguished by Mode) for each item in the filter.
Base configuration modes include the following:
• Claimant
• ClaimCostOnly
• Coverage
• Exposure
• ExposureOnly
• ReservingCurrency
• RecoveryCategory
You can modify these modes and configure additional modes in Gosu.
If you select the Toolbar element, you see a set of basic properties for it. You can also scroll down to see the list of
advanced properties associated with it.
Note that the value property is set to filterOption. This is a page variable that you can access by selecting the
entire page, then opening the Variables tab.
It sets the initial value to either the last saved option or to a default value.
Note the onChange property is set to the following:
financials.FinancialsUtil.setFinancialsSummaryOption(Claim, filterOption)
This saves the filter option for the financials summary screen for the user session.
The optionLabel property uses a page method to determine the option label:
getFilterOptionLabel(VALUE)
You can access this method by selecting entire page, then opening the Code tab.
Notice that if you select Panel Ref, the def property is set to the following:
FinancialSummaryLV(Claim, financialsSummaryBridge)
The cell object has a getValue accessor that takes as an argument a FinancialsExpression. You can pass in any
expression that you added to the model as you configured the FinancialsSummaryPanelSet.Mode file.
For example, if you try to access a value for an expression not in your FinancialsSummaryPanelSet.Exposure
model, ClaimCenter throws an exception similar to the following:
If you want to change the list view, the interesting fields are value and action. These attributes must reference the
same FinancialExpression. If the attributes do not match, a link for a value takes the user to a list of transactions
that have nothing to do with the actual selected value.
You can control the visibility of an individual column by setting its permission in the visible attribute. The default
list view hides columns that ClaimCenter does not permit users to see. For example, in the default configuration, the
FinancialSummaryCell:RemainingReserves cell in the FinancialsSummaryLV PCF sets the following for the
visible attribute.:
This cell only displays the remaining reserves if the user has permission to view payments and reserves for a claim.
For users without the permission, the Remaining Reserves column is invisible.
Set reserves by available It is possible to change the state of the reserves on a claim by changing the value of the NewAvailable
reserves Reserves field for a reserve line.
Set reserves by total It is possible to change the state of the reserves on a claim by changing the value of the New Total
incurred Incurred field for a reserve line.
To set the mode to one or the other of these choices, edit the SetReservesByTotalIncurred parameter in the
config.xml file.
• If the SetReservesByTotalIncurred value is false, ClaimCenter sets reserves by the available reserves.
• If the SetReservesByTotalIncurred value is true, ClaimCenter sets reserves by the total incurred.
The default is false.
During creation of a new reserve for a claim, ClaimCenter displays the current state of the entire claim's reserves
including the available and unapproved reserves.
Each line in this screen corresponds to one of the ReserveLine items on the claim. A ReserveLine is a unique
combination of Exposure, CostType, and CostCategory on a particular claim. You can set reserves for, and make
payments against, each reserve line item in a claim. The SetReservesByTotalIncurred parameter value sets which
PCF page defines the reserve line items:
• If SetReservesByTotalIncurred is true, then the EditableReservesLV.SetByNewTotalIncurred PCF
defines the content for the page.
• If SetReservesByTotalIncurred is false, then the EditableReservesLV.SetByNewAvailableReserves PCF
defines the content for the page.
You can find these files in pcf→claim→newtransaction→reserve.
Field Description
Exposure The claim’s exposure corresponding to the reserve line. This is a read-only field for an existing ReserveLine.
Field Description
Coverage The policy coverage corresponding to the reserve. This is a read-only field.
Cost Type The cost type corresponding to the reserve. This is a read-only field for an existing ReserveLine.
Cost Category The cost category corresponding to the reserve. This is a read-only field for an existing ReserveLine.
Currently The calculated amount of available reserves for this ReserveLine. This is a read-only field.
Available
Pending The pending approval reserves for this reserve line. This field is read-only.
Approval
New This field is visible only if SetReservesByTotalIncurred is false. If visible, you use this field to change
Available reserves for a ReserveLine. The field is editable as long as the exposure for the specific line item is also open.
Reserves • If ClaimCenter displays the Set Reserve page, this field is equal to Available Reserves plus the Pending Reserves.
• If a user enters a value in this field, the value represents the reserve the user wants for the ReserveLine.
• After a user clicks Save, if the user requires approval for a reserve, ClaimCenter updates the Pending Approval
field. Otherwise, it updates Available Reserves.
Change This field tracks the changes taking place between the time that a user first opens the Set Reserve dialog and
the time that the user presses the Save button. The meaning of this field changes depending on how you have
set SetReservesByTotalIncurred.
• If SetReservesByTotalIncurred is false, the field contains difference between the New Available Reserves
and Available Reserves columns.
• If SetReservesByTotalIncurred is true, the field contains the difference between the New Total Incurred
and Total Incurred columns.
Comments Comments about the reserve. The value in this field is saved only for a new reserve or for a reserve for which
the reserve amount changes.
New Total This field is visible only if SetReservesByTotalIncurred is true. If visible, you use this field to change reserves
Incurred for a ReserveLine. The field is editable as long as the exposure (or claim) for the specific reserve line is open
as well.
• If ClaimCenter displays the Set Reserve page, this field is equal to Total Incurred plus the Pending Reserves.
• If a user enters a value in this field, the value represents the reserve the user wants for the ReserveLine.
• After a user clicks Save, if the user requires approval for a reserve, ClaimCenter updates the Pending Approval
field. Otherwise, it updates Total Incurred.
Total Incurred This field is visible only if SetReservesByTotalIncurred is true. This field contains the current total incurred
for this line item. This field is read-only.
After you enter a new reserve value, ClaimCenter reflects the change:
Then, suppose that you save the change, exit the dialog, and come back to it later. You see:
The next time you return to the dialog, if ClaimCenter has not yet approved the changes, you see the following:
Permission Description
claimviewrecres View recovery reserves (and derived information) on a claim
A user can only create a reserve with a non-null exposure if the selected exposure is open.
Procedure
1. Open EditableReservesLV. You can find this files in pcf→claim→newtransaction→reserve.
2. Select the RowIterator widget near the top of the page. Scroll through the advanced options and find the
pageSize attribute. The default value is 5.
3. Set the pageSize as needed.
4. Save and close the file.
Permission Description
claimviewpay View checks and payments (and derived information) on a claim
clearedpayvoid Void a cleared check
In the base configuration, Guidewire grants the clearedpayvoid permission to the User Admin or Superuser roles
only. Guidewire grants all other check and payment permissions to the following roles:
• Adjuster
• Claims Supervisor
• Clerical
• Manager
• New Loss Processing Supervisor
• Superuser
The following roles have the claimviewpay permission:
• Customer Service Representative
• Integration Admin
• Viewer
On the Administration page, you can set the following payment authority limits for users. (Again, these are taken from
the AuthorityLimitType typelist.)
Procedure
1. Start Guidewire Studio.
2. Navigate to the configuration→config→Rule Sets→Preupdate→TransactionSetPreupdate rule set.
3. Right-click the TransactionPre-update root entity and select NewRule.
4. Create a new rule, TPU09000 - Edit Existing Payment, as follows:
uses gw.api.locale.DisplayKey
uses gw.api.financials.CheckUtil
uses gw.api.util.CurrencyUtil
uses gw.api.financials.TransactionApprovalRuleParameters
CONDITION(transactionSet : entity.TransactionSet) :
return transactionSet typeis CheckSet
gw.financials.CheckRecurrenceUIHelper
You can open this class and view or modify its business logic.
For example, to modify the defaults when creating a new weekly or monthly check recurrence, modify the
createRecurrenceWithDefaults method on one of the inner classes WeeklyRecurrenceUIHelper or
MonthlyRecurrenceUIHelper. These inner classes are defined at the bottom of CheckRecurrenceUIHelper.
CheckRecurrence
IssuanceDateOffset Number of days before a check is due that ClaimCenter needs to issue the check
In this case, the user’s permissions and authority limits determine if the invoices can be automatically approved
or paid.
• They can be imported into ClaimCenter from an external vendor portal.
In the case of imported invoices, the user permissions and authority limits associated with the web service used
for the import determine whether invoices can be automatically approved or paid.
This topic describes how STIP can be configured.
/**
* Returns a list of the reasons the supplied invoice is NOT qualified.
* If the collection is empty, no objections could be found.
**/
override protected function getFailedToQualifyReasons(invoice: ServiceRequestInvoice): List<String>
{
var serviceRequest = invoice.ServiceRequest
var claim = serviceRequest.Claim
var failureReasons: List<String> = {}
if (claim.State == ClaimState.TC_CLOSED)
{
failureReasons.add(DisplayKey.get("Web.Plugin.InvoiceAutoApproveAutoPayPlugin.ClaimIsClosed"))
}
if (claim.SIUStatus == SIUStatus.TC_UNDER_INVESTIGATION)
{
failureReasons.add(DisplayKey.get("Web.Plugin.InvoiceAutoApproveAutoPayPlugin
.ClaimHasActiveSIU"))
}
if (claim.applyFinancialHolds())
{
failureReasons.add(DisplayKey.get("Web.Plugin.InvoiceAutoApproveAutoPayPlugin.
ClaimIsUnderFinancialHold"))
}
• InvoiceAutoPaymentHelper—This helper class processes invoices that require payment. It contains a list of
failure reasons, similar to the InvoiceAutoApprovalHelper class, which might disqualify an invoice from auto-
payment. In the case of manual invoices, the creating user’s permission and authority limits are used to determine
if an invoice can be automatically paid.
The following is an example of some failure reasons that can be included in the InvoiceAutoPaymentHelper. A
common configuration would be to comment out or modify these, as required.
/**
* Returns a list of the reasons the supplied invoice is NOT qualified.
* If the collection is empty no objections could be found.
**/
override protected function getFailedToQualifyReasons(invoice: ServiceRequestInvoice): List<String>
{
final var failureReasons = new ArrayList<String>()
final var serviceRequest = invoice.ServiceRequest
final var owners = getFilteredReserveLineOwners(invoice)
final var claim = serviceRequest.Claim
if (!serviceRequest.Claim.AtAbilityToPay)
{
failureReasons.add(DisplayKey.get("Rules.TransactionApproval.ClaimNotAtAbilityToPay"))
}
If an invoice does not qualify for STIP, you need to process it manually using the usual steps in the application, such
as using the Check Wizard to make payments.
When an imported invoice fails to qualify for STIP, a new activity is generated to notify users that the work must be
done manually.
Disabling STIP
You can change or disable invoice automation by modifying the IInvoiceAutoProcessingPlugin and its
associated helper classes.
/**
* Returns a list of the reasons the supplied invoice is NOT qualified.
* If the collection is empty no objections could be found.
**/
override protected function getFailedToQualifyReasons(invoice: ServiceRequestInvoice): List<String>
{
...
/*if (!serviceRequest.Claim.AtAbilityToPay)
{
failureReasons.add(DisplayKey.get("Rules.TransactionApproval.ClaimNotAtAbilityToPay"))
} */
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
Note: You can use a similar method to define a payment limit in the InvoiceAutoPaymentHelper class.
4. Save your changes.
Result
The monetary limit for auto-approval for invoices is now set to $1000.
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
Procedure
1. In ClaimCenter Studio, edit the gw.entity.GWClaimFinancialHoldsEnhancement.applyFinancialHolds
method, adding an additional case for it to return true. The default method code is as follows:
if(exposure.Claim.applyFinancialHolds() == true) {
exposure.Claim.createNoteIfInitialReservesNotCreated()
} else {
exposure.createInitialReserve(
"claimcost", "body", ScriptParameters.InitialReserve_AutoMinorVehicleDamageBody )
}
IMPORTANT If you add rules to the InitialReserve rule set, you must also perform the check for financial holds
before creating claimcost reserves. If you do not perform this check, ClaimCenter will create the reserves in the
rule set and then reject them in the TransactionSetValidationRules rule set. Because the reserve and the new exposure
are in the same bundle, you will not be able to save your new exposure.
You can configure authority limits according to application requirements. Some examples are adding authority limit
types such as policy type or , coverage, cost type, lines of business, coverage subtype, and cost category.
Authority limits are configured and extended using the TransactionSetAuthorityLimitsPlugin. For example,
you can add additional limit types, such as Recovery.
See also
• Application Guide
Procedure
1. If necessary, start Guidewire Studio.
At a command prompt, navigate to the ClaimCenter directory and enter:
gwb studio
Name Value
code ra
/**
* Sums up the claim amounts of the given recoveries matching the given CoverageType and CostType.
*
* @param recoveries array of recoveries whose claim amounts are to be summed
* @param coverageType only recoveries with this CoverageType should be included in the sum
* @param costType only recoveries with this CostType should be included in the sum
* @return the sum of the claim amounts of the given recoveries matching the given
* CoverageType and CostType
*/
function sumRecoveries(recoveries: Recovery[], coverageType: CoverageType, costType: CostType):
CurrencyAmount
{
Assert.check(recoveries.length > 0 ? null : "There must be at least one recovery in the
RecoverySet.")
var sum = CurrencyAmount.getStrict(BigDecimal.ZERO, recoveries[0].Claim.Currency)
for (var recovery in recoveries)
{
var reserveExposureCoverageType = (null != recovery.Exposure) ?
recovery.Exposure.PrimaryCoverage : null
if (isNullOrEquals(coverageType, reserveExposureCoverageType)
&& isNullOrEquals(costType, recovery.CostType))
{
sum = sum.addStrict(recovery.ClaimAmount)
}
}
return sum
}
package gw.plugin.authoritylimits.sum
uses gw.pl.util.Assert
uses gw.api.financials.CurrencyAmount
uses java.math.BigDecimal
uses java.math.RoundingMode
@Export
class RecoveryAmountSum extends AbstractAuthoritySum
{
override function exceedsLimit(bean: Approvable, limit: AuthorityLimit): boolean
{
Assert.check(bean typeis RecoverySet ? null : "Bean must be a RecoverySet")
Assert.check(limit.LimitType == AuthorityLimitType ? null : "The limit must be of type " +
AuthorityLimitType + " not " + limit.LimitType)
var recoveries = (bean as RecoverySet).Recoveries
Assert.check(recoveries.length > 0 ? null : "There must be at least one recovery in the
RecoverySet.")
var sum = CurrencyAmount.getStrict(BigDecimal.ZERO, recoveries[0].Claim.Currency)
sum = sum.addStrict(sumRecoveries(recoveries,
limit.CoverageType, limit.CostType))
var limitAmount = limit.LimitAmount
if (sum.Currency != limitAmount.Currency)
{
limitAmount = limitAmount.convert(sum.Currency, RoundingMode.UP)
}
return (sum.absStrict().compareTo(limitAmount) > 0)
}
10. The next step is to reference the new typecode and recovery sum class. Navigate to
configuration→gsrc→gw→plugin→authoritylimits and open AuthorityLimitsConfiguration.
In the buildEntryMap function, add the following line of code:
11. Finally, comment out the overridden requiresApproval method in the RecoveryLimitTester Gosu class so
that the method in the base class, AuthorityLimitTester, is called:
Procedure
1. If necessary, start Guidewire Studio.
Configuring authority limits 787
Configuration Guide 9.0.5
gwb studio
3. Add CoverageSubType as a typekey. Click the plus icon ( ), and select typekey from the drop-down choice
list.
Enter the following values:
Name Value
name CoverageSubType
typelist CoverageSubType
nullok true
desc If non-null, the limit applies only to this coverage subtype.
Name Value
name CoverageSubType
keyposition 5
CostType 6
Retired 7
...
static class AuthorityLimitComparator implements Comparator<AuthorityLimit>
{
override function compare(al1: AuthorityLimit, al2: AuthorityLimit): int
{
// NOTE - NO NEED TO SORT ON AMOUNT, SINCE 2 DIFFERENT LIMITS CANNOT DIFFER ONLY IN AMOUNTS
if (limitType1 != limitType2)
{
// limit types are not equal, so we can just return result of comparing them
(we know they are not null).
return limitType1.compareTo(limitType2)
}
else if (policyType1 != policyType2)
{
// policyTypes are not equal so sort them, putting null values (if any) last
return compareTypeKeysWithNullsOrderedLast(policyType1, policyType2)
}
else if (coverageType1 != coverageType2)
{
// coverageTypes are not equal so sort them, putting null values (if any) last
return compareTypeKeysWithNullsOrderedLast(coverageType1, coverageType2)
}
+ else if (coverageSubType1 != coverageSubType2)
+ {
+ // coverageSubTypes are not equal so sort them, putting null values (if any) last
+ return compareTypeKeysWithNullsOrderedLast(coverageSubType1, coverageSubType2)
+ }
else
{
// compare costTypes, putting null values (if any) last
return compareTypeKeysWithNullsOrderedLast(costType1, costType2)
}
}
...
}
...
var coverageSubType = limit.CoverageSubType
if (coverageSubType != null)
{
var exposure = transaction.Exposure
if (exposure == null || coverageSubType != exposure.CoverageSubType)
{
return false
}
}
...
9. Modify the getExposures function as follows (new code is indicated with a plus sign):
...
public static function getExposures(claim: Claim, final limit: AuthorityLimit) : Collection<Exposure>
{
+ if (limit.CoverageType == null && limit.CoverageSubType == null)
{
return null
}
return new HashSet<Exposure>(Arrays.asList(claim.Exposures.where(\ exposure ->
{
return (limit.CoverageType == null || (exposure.PrimaryCoverage != null && limit.CoverageType ==
exposure.PrimaryCoverage))
+ && (limit.CoverageSubType == null || (exposure.CoverageSubType != null && limit.CoverageSubType ==
exposure.CoverageSubType))
})))
}
...
10. Next, modify the reserveMatchesExposureAttributes method as follows (new code is indicated with a plus
sign):
...
public static function reserveMatchesExposureAttributes(reserve : Reserve, limit : AuthorityLimit) :
boolean
{
var reserveExposureCoverageType = (null != reserve.Exposure) ? reserve.Exposure.PrimaryCoverage :
null
+ var reserveCoverageSubType = (null != reserve.Exposure) ? reserve.Exposure.CoverageSubType : null
return (limit.CoverageType == null || limit.CoverageType == reserveExposureCoverageType)
+ && (limit.CoverageSubType == null || reserveCoverageSubType == limit.CoverageSubType)
}
...
11. Now, modify the validateTypecodeHierarchy method as follows (new code is indicated with a plus sign):
...
public static function validateTypecodeHierarchy(authorityLimit : AuthorityLimit)
{
if (authorityLimit.PolicyType != null && authorityLimit.CoverageType != null &&
!authorityLimit.CoverageType.hasCategory(authorityLimit.PolicyType))
{
authorityLimit.CoverageType = null
+ authorityLimit.CoverageSubType = null
}
+ if (authorityLimit.CoverageType != null && authorityLimit.CoverageSubType != null &&
+ !authorityLimit.CoverageSubType.hasCategory(authorityLimit.CoverageType))
+ {
+ authorityLimit.CoverageSubType = null
+ }
}
...
...
private static function getUniqueIdentifier(limit : AuthorityLimit) : String
{
return (limit.LimitType == null ? limit.LimitType : limit.LimitType.Code) + "-" +
(limit.PolicyType == null ? limit.PolicyType : limit.PolicyType.Code) + "-" +
(limit.CoverageType == null ? limit.CoverageType : limit.CoverageType.Code) + "-" +
+ (limit.CoverageSubType == null ? limit.CoverageSubType : limit.CoverageSubType.Code) + "-" +
(limit.CostType == null ? limit.CostType : limit.CostType.Code) /*+ "-" +
asAuthorityLimitInternal(limit).ClaimID */;
}
...
13. Navigate to configuration→config→locale and open the display_en_US.properties file. Add coverage
subtype to AuthorityLimit.AuthorityLimitError.
AuthorityLimit.AuthorityLimitError = Cannot create two authority limits with the same limit type,
policy type, coverage, coverage subtype, and cost type
14. Add a display key for the new authority limit filter.
15. The next step is to make the corresponding changes to the relevant PCF files. Navigate to
configuration→config→web→pcf→admin→authoritylimits and open AuthorityLimitProfileDV.pcf.
16. Add a new TypeKeyCell widget to the right of Coverage Type. In the Properties tab, enter the following
values:
Name Value
editable true
id CoverageSubType
label "DisplayKey.get('LV.Admin.EditableAuthorityLimits.CoverageSubtype')"
value AuthorityLimit.CoverageSubType
valueType typekey.CoverageSubtype
Select the PostOnChange tab. Click the Enable targeted Post On Change check box and enter the following values:
Name Value
onChange gw.plugin.authoritylimits.AuthorityLimitsConfiguration.validateTypecode Hierarchy(Authorit
yLimit)
Name Value
target DATA_ONLY
Name Value
editable true
id CoverageSubType
label "DisplayKey.get('LV.Admin.EditableAuthorityLimits.CoverageSubtype')"
sortOrder 4
value AuthorityLimit.CoverageSubType
valueType typekey.CoverageSubtype
Select the PostOnChange tab. Click the Enable targeted Post On Change check box and enter the following values:
Name Value
onChange gw.plugin.authoritylimits.AuthorityLimitsConfiguration.validateTypecode Hierarchy(Authorit
yLimit)
target DATA_ONLY
19. Edit the CostType TypeCell widget to update the sort order as follows:
Name Value
sortOrder 5
ClaimCenter comes equipped with a set of permissions and roles that you can use to control access to the Bulk
Invoices feature. These permission are separate from the standard payment permissions. A user with the proper
permissions can work with the life cycle for a bulk invoice. This typically involves a user doing the following:
• Creating a bulk invoice object.
• Working on the invoice and saving a draft until all the associated information is complete.
• Validating the bulk invoice (and correcting any validation flags if necessary).
• Submitting the invoice for approval and subsequent payment.
ClaimCenter supports a batch process for processing bulk invoice payments. You can configure how often this batch
process occurs. Guidewire also provides a BulkInvoiceAPI web service that you can use to do post-processing on a
bulk invoice payment. For example, you can detect holds or voids originating in an external application and have it
reflected in the Bulk Invoices user interface. See the the Integration Guide for information on working with this API.
The Bulk Invoices user interface allows users to work on the invoice over time. ClaimCenter saves a draft of the
invoice until the user is ready to submit it for payment. Of course, before a user can submit a invoice, the invoice
must be both validated and approved. A bulk invoice validation plugin is responsible for handling this validation. If
you do not implement a validation plugin, after a user presses the Validate button, ClaimCenter simply marks the
invoice as Valid. See the Integration Guide for information on implementing a bulk invoice validation plugin.
If a bulk invoice requires approval, ClaimCenter creates an approval activity and assigns it to a user determined by
the approval routing rules. You must write bulk invoice approval rule sets that manage approval routing. These rule
sets are the only mechanism for controlling approval of bulk invoices. See the Rules Guide for information on
creating approval rule sets for bulk invoices.
Unlike other financial transactions, there are no specific authority limits for bulk invoices. Bulk invoices for
payments are subject to the general financial transaction authority limits for that user. ClaimCenter checks each
individual payment in the bulk invoice against the authority limit for the user.
Entity Description
BIValidationAlert An alert generated from the validation of a BulkInvoice. Your implementation of the IBulkInvoiceVa
lidationPlugin is responsible for returning these objects as necessary. Each alert consists of a
message and an alert type from the BIValidationAlertType typelist.
BulkInvoice Corresponds to the invoice requiring payment. This is the top-level entity. The creation and submission
of a BulkInvoice entity results in a single large payment to the payee for this BulkInvoice. A BulkInv
oice contains one or more BulkInvoiceItem objects.
BulkInvoiceItem An individual line item on the bill that contains an amount and other fields necessary to code the cost
of the item to a particular reserve line.
ReserveLineWrapper Supports the creation of a draft reserve line while the BulkInvoice is in a draft state. This entity exists
to support internal processing within ClaimCenter.
The following table lists the typelists associated with bulk invoices:
Typelist Description
BIValidationAlertType Defines possible alerts returned from the validation plugin. This list contains a single alert type:
• unspecified
You can extend this list to support your validation plugin.
BulkInvoiceItemStatus Status of a single BulkInvoiceItem. This value controls which actions are possible for a given Item.
This list is final. You cannot extend it.
Typelist Description
BulkInvoiceStatus Defines business statuses of a BulkInvoice. This status controls which actions are possible for the
invoice (such as edit, submit, void, and so forth). This list is final. You cannot extend it.
In the base application configuration, Guidewire grants these permissions, by default, to the following roles:
• Adjuster
• Claims Supervisor
• Clerical
• Customer Service Representative
• Manager
• New Loss Processing Supervisor
• Superuser
There are no specific authority limits that apply only to bulk invoices. See “The CheckAuthorityLimits parameter
and bulk invoices” on page 793 for more information on the interaction between system-defined authority limits
and bulk invoices.
BulkInvoiceApprovalPattern The name of the activity pattern to use while creating bulk invoice approval
activities. By default, the name of the activity is approve_bulkinvoice.
AllowPaymentsExceedReservesLimits This parameter applies to all payments, not just bulk payments. If this value is true,
bulk payments can exceed reserves for each BulkInvoiceItem on the invoice.
In the scheduler-config.xml file, you can configure how often the application runs the bulkinvoiceesc batch
process. By default, this happens every day 15 minutes after midnight and 5:00 PM.
The CheckAuthorityLimits configuration parameter controls whether ClaimCenter checks authority limits for all
financial transaction in ClaimCenter. By default, this parameter is true which means ClaimCenter does check. To
check authority limits on most transactions but exclude bulk invoices, you can do the following:
• Set CheckAuthorityLimits to false.
• Use the CheckSet.isForBulkedCheck method to test whether a transaction set has an associated bulk invoice.
• Use the TransactionSet.testAuthorityLimits method in your approval rules to manually check authority
limits for transactions not related to bulk invoices.
For more information about working with transaction approval in Gosu rules, see the Rules Guide.