3882
Browse Default data tokens and populate DefaultDataTokensList
Populate DefaultDataTokensSR page
Set MaximumLoopSize = (UseLiveCustomerData = true ? Param.SeedDataSize : 1)
Loop through 1 to MaximumLoopSize
Loop through SeedParameters.JSONArrayList
If UseLiveCustomerData = false, Call GetPropositionDataForTreatment DF and append results into PropositionSRList
If UseLiveCustomerData = true, Browse SeedTestLiveData data set with below keys
TreatmentName
TreatmentVariant
OfferVariant
SampleId = CurrentCounter
If no result returned throw a known error. Else, go on next step
Append all results into PropositionSRList.pxResults
Loop through SeedUserList
Populate SeedUserSR page from SeedDataToken
If UseLiveCustomerData = true, override DefaultDataTokensSR with values from PropositionSRList.pxResults(1) (By
Default use LiveCustomerProposition values)
Override DefaultDataTokensSR with SeedUserSR (By default use SeedUserSR values)
Populate SeedUserSR page for below properties from seed user info with
pySubjectID
CustomerID
pyEmailAddress
ServiceNumber
NamedUser
.CustomerAccount.Contact.EmailAddress = .pyEmailAddress
Call ProcessEmailSeedTest (Use PropostionSRList & SeedUserSR Page)
Prepare Subscription.Context from SeedUserSR page
Be sure you are passing below properties as part of Subscription.Context
FirstName
ServiceNumber
Call PrepareEmailTreatments DF
Call ProcessOffer
Call ProcessSMSSeedTest (Use PropostionSRList & SeedUserSR Page)
 Substitute data tokens with SubstituteTokens(ClipboardPage, String) for TreatmentDynamicVariable1 attribute from
SeedUserSR page -TBC
 Call ProcessOffer
  ProcessAppPushSeedTest  (Use PropostionSRList & SeedUserSR Page)


ProcessAppPushSeedTest  (Use PropostionSRList & SeedUserSR Page)
Merge SeedUserSR page & PropostionSRList.pxResults(1)
Call InvokeAppPushNotification activity

Questions
1. How to do bundling for Email? @Logic
2. Which property should be populated for SMS offer flows? @Logic +


3883
a. SMSBodyText
b. TreatmentDynamicVariable1 → Use that one
3. We should not be truncating new data set in extractor run, right?  → No, do not truncate it
4. Do we need to check ServiceNumber for apppush in addition to NamedUser check?Check servicenumbr
5. SeedTesting/IsProcessSeedTestData & DF WorkItem configuration should be carried as part of AOMBusinessConfig or AOMConfig?
→ AOMConfig  +
6. Check if there is any new data token for email? @Logic
7. GetPropositionDataForTreatment needs to update for below condition @Logic
a. Treatment Name (.pyName) - Remove TreatmentID
8. What is the new DF name? @Logic


3884
652041 - Add Division to Seed User
Extend SeedUser Datatype to have new field Division
Create new datapage

Create activity

Alternative approach:
Make changes to the existing DataPage and Activity:Division Division Text(Single Line)  AOM Framework v3Name ID Type Options Application Layer
Datapage uses an activity so that logic can query the SeedUser based on Division
Applies To VFUK-FW-AOMFW-Data-SeedUser
Ruleset AOMFW-Database
ParametersServiceNumber, Division
Scope Node
Activity GetSeedUserFromDivisionD_SeedUserForDivision
Browse seed user with given service number and seed user division, loop through all the values in Division, If Param.Divisionexists in seed
user division, copy current SeedUser page into D_SeedUserForDivision
Applies To VFUK-FW-AOMFW-Data-SeedUser
Ruleset AOMFW
Input
ParametersServiceNumber, Division
Output
ParametersGetSeedUserFromDivision
Error
Handling Throws Runtime ExceptionGetSeedUserFromDivision
Datapage uses an activity so that logic can query the SeedUser based on DivisionD_SeedUserFromTagList


3885

 Applies To VFUK-FW-AOMFW-Data-SeedUser
Ruleset AOMFW-Database
ParametersServiceNumber, Division, SeedUserTags
Scope Node
Activity GetSeedUserFromDivision
Browse seed user with given service number or division and seed user tags.
Applies To VFUK-FW-AOMFW-Data-SeedUser
Ruleset AOMFW
Input
ParametersServiceNumber, Division, SeedUserTags
Output
ParametersGetSeedUserFromTagList
Error
Handling ServiceNumber or Division; Throw error if one is empty
Throws Runtime ExceptionGetSeedUserFromTagList


3886
Get NBA Seed Test
Introduction
Technical Details
Class
Data Type
Data Page
Report Definition
AOM Config
Activities
Introduction
Technical Details
Class
Data Type
Data PageFeature/Functionality GetNBA Seed testing functionality that bypass business rules and present relative offers and treatments
back to channel with no relative business rules applied
Data tokens are replaced from AOMBusiness config and SeedUser data types if available. If no record is
available in SeedUserNBAWhitelist for service number, Get Next Best Actions REST API  BAU
operation is applied
Description GetNextBestActions, ExecuteNBASeedTest activities to return strategy results to GetNBA response for
Seed TestingGeneral Availability R2.7
VFUK-FW-AOMFW-Data-
SeedUserNBAWhitelistInherits from VFUK-FW-AOMFW-Data className Note
SeedUserNBAWhitelist VFUK-FW-AOMFW-Data-
SeedUserNBAWhitelist Please check Seed User NBA Whitelist for detailName Id Note
D_SeedUserNBAWhitelist
 1 day cache
List type
node levelServiceNumber
Channel
SubChannelName Detail Keys


3887
Report Definition
AOM Config
Activities
 GetSeedUserNBAWhitelist Query to VFUK-FW-AOMFW-Data-SeedUserNBAWhitelist class with below keys and return results
TreatmentName, TreatmentVariant and OfferVariant
ServiceNumber
Channel
SubChannelName Steps
SeedTestEnabled GetNBA TRUE or FALSEConfigType ConfigName ConfigValue
This activity gets default & seed user data tokens for a service number and after calling the PrepareInboundNBAForSeedTest DF, it replaces
data tokens for TreatmentAttributes & ActionTemplateDetail properties in strategy result list
Applies ToVFUK-AOM-Int-Services
Ruleset AOM-Int
Input
Parameter
sN/A
Error
HandlingPrimary Catch-all Error Handler: Catches all the unhandled Exceptions or Errors in the activity
Empty data token value error handler
Multiple records for a ServiceNumber in Seed User data type Error HandlerExecuteNBASeedTest


3888
Adding Seed Test to Channel Management
ExecuteSeedTest
GetPropositionDataForTreatment to return the TargetSubChannel property in the response proposition data for the given
treatment/offer/channel combination
App to verify,
if a TargetSubChannel is the same for all treatments
 It should be either MailJet or IMI
Error out, if either of the above fail
App to SeedTestLiveData, browse the data using the input SeedParametersTreatment JSON data (do this only, if
UseLiveCustomerData=true)
App to verify,
o   if a TargetSubChannel is the same for all treatments
o    It should be either MailJet or IMI
o   Error out, if either of the above fail
Store the sub-channel in a local variable to be used later
Pass the sub-channel to the ProcessEmailSeedTest activity invocation
ProcessEmailSeedTest
Populate subscription context (as-is)
Populate the TreatmentList on the Subscription page (as-is)
Add Sub-channel as a parameter to ProcessEmailSeedTest Activity
Add new condition on Sub Channel
If Sub Channel=MailJet Invoke ProcessEmailForMailJet Sub Activity
If Sub Channel=IMI Invoke ProcessEmailForIMI Sub Activity
ProcessEmailForMailJet
Invoke PrepareEmailTreatmentsForSeedTest DF
Move applicable steps from ProcessEmailSeedTest to this activity
Invoke ProcessOffer Activity
Error handling as per AOM standards
ProcessEmailForIMI
Invoke PrepareEmailTreatmentsByChannelManagementForSeedTest DF
Prepare the IMI Request (Separate activity implemented as part of channel management)
Invoke the IMI Connector activity to send an email
Error handling as per AOM standards
ProcessSMSSeedTest (Channel Management will be enabled no Dual running)
Remove all steps populating the data into the DecisionRequest page


Remove all steps populating the data into the DecisionRequest page
Invoke VFUK-FW-AOMFW-Int.SendSMSMessage


3889
Assisted Upgrades Test Harness
Assisted Upgrade Test Harness
Input Parameters
Design Overview
Implementation
Activities
Error Scenarios
Assisted Upgrade Test Harness
 AssistedUpgradeTH provides the ability to test AssistedUpgrade dataflow logic and visualize the SIMO to SIMO recommendations whilst
the Agent front end is not available. The test harness activity will call CheckRetentionEligibility(CRE) and ProcessedServiceList(GPSL)
API’s to provide input to DF. Please refer to the  AOM External Interface Spec for more details on CRE and GPSL API.
Input Parameters
A c c o u n t N u m b e r – Used as a request parameter for GPSL API
S e r v i c e N u m b e r – Used to build the subscription page and used as a request parameter in CRE API and set as
Context("ServiceNumber") in Subscription
A g e n t D e p a r t m e n t – Used as request parameter in CRE API and set as Context("AgentTeam") in Subscription
C h a n n e l – Set as Context("Channel") in Subscription when calling the AssistedUpgrade DF. Currently it is hardcoded to “InboundCC”
Design Overview
The AssistesUpgradeTh activity will follow the below design to set CRE and GPSL API response to the Subscription page before calling the
AssistedUpgrade Dataflow.


3891
Implementation
AssistedUpgrade Activity was implemented based on requirements specified in AOM-1714 and AOM-1959 userstories. The Subscription
page which is built by calling the GetSubscription activity is updated with CRE and GPSL responses before calling the logic. In CRE
response is mapped to the Subscription Context. In The GPSL response, the matching ProductRoot and OfferDetails are mapped to the
respective properties in the Subscription. Logic will not be called if there are no eligible Retention for the upgrade in CRE Response and will
display the message.
Activities
GetRetentionEligibility: This activity will
1. Set ServiceNumber to the CRE request based on SubscriptionType
2. Set AgentTeam to the CRE Request and invoke CheckRetentionEligibility activity which calls the CRE API
3. Set the ErrorStackTrace id CRE Response is not successful or there is no eligible Retention in the Response
4. Returns RetentionEligiblity if above condition (3) is false
GetServiceList: This activity will
1. Set AccoountNumber to the GPSL request
2. Invoke GetProcessedServiceList Activity which calls the GPSL API
3. Set the ErrorStackTrace if GPSL Response is not successful
4. Returns ServiceList if GPSL response is successful.

Error Scenarios
Below are the error scenarios and corresponding messages displayed:

 MSISDN Not Found in AOM The MSISDN   >>" + Param.MSISDN + "<< not found.
CRE Response unsuccessful CheckRetentionEligibility API was unsuccessful: Severity - <E>: Message -
<CustomerIdentification is not valid>
RetentionEligibility is Empty in CRE response RetentionEligibility is empty for ServiceNumber : <9876543210>


GPSL response unsuccessful ProcessedServiceList API call was unsuccessful with message: <Invalid Data Exception>Scenario Message Displayed


3892
Email Seed Test POC
Users are able to send the treatment/s to the dummy users which does not exist in the subscription spine. If the treatments can be bundled
it is bundled in via calling PrepareEmailTreatments strategy and prepared in DF_ProcessOffer dataflow and send to the selected email
address. If the personalization tokens are set in DataTokens property in JSON format, the values in the corresponding property will be used
in email treatment. Else, the default values will be used to substituting the tokens. Email/s are prepared in the Process1 & delivered in the
Process2.
Process1
Parameters
Steps
Populate Treatment Data
Proposition data is prepared for the TreatmentId/s & TreatmentVariant and results are stored in SRPageList page list.
Bundle email treatments if exists
SRPageList page list copied into Customer.TreatmentList page list to process records in the PreapareEmailTreatments strategy.
GetBundleEmailData DF is called to call the PrepareEmailTreatments strategy and results stored in SRPageList2 page list.
Load Default Data Tokens
Default data token values are stored in SeedUserSR page.
Load Seed User Data
If the DataTokens parameters is not null, the JSON values converted into as a page into SeedUserDataToken page.TreatmentId The treatment/s to be sent to the selected
email address as comma separated values.Trt1,Trt2,Trt5
TreatmentVariant Treatment variants to populate the treatment
variant dataTreatmentVariantDefault
CustomerID Dummy CustomerID which does not exist in
the Subscription spineABC
EmailAddress Email address to sent the email aa.bb@adqura.com
FirstName Default first name to populate the
personalization tokenKaya
ObfuscatedMobileNumber Default mobile number to populate the
personalization token905554443322
DataTokens Data tokens in JSON format to override the


personalization token905554443322
DataTokens Data tokens in JSON format to override the
default personalization tokens for the
selected customer{ "FirstName": "Kagan",
"ObfuscatedMobileNumber":
"905556667788" }
Operator Ther operator that runs the email seed test Kagan.kaya@adqura.comName Description Example Value


3893
SeedUserDataToken values are merged into SeedUserSR page. If the same property exists in both pages, the value from
SeedUserDataToken page overrides the value in the SeedUserSR page.
Call ProcessOffer OOTB activity
SRPageList2 page list copyed into pySRList page list to process values in ProcessOffer activity.
ProcessOffer activity called.
Parameters are populated for the ProcessOffer activity.
ProcessOfferHelper activity called to get top level SR class. (VFUK-AOMFW-SR)
pxRunSingleCaseDDF activity called to trigger the InboundPrimaryData DF which calls DF_ProcessOffer DF.
Results are stored in EmailStaging table.

Process2
SendEmailsInBulk Agent
The agent that picks up email records and queues for PegaMKT-Engine.SendEmailChild in every 10 seconds.
SendEmailsInBulkMaster Activity
This activity queues all the “Pending-Delivery” status records to PegaMKT-Engine.SendEmailChild agent.
It is run for every 10 seconds
SendEmailChild Agent
This agent that processes queued items for “Pending-Delivery” status in EmailStaging table
It is run for every 10 seconds
SendEmailChild Activity
This activity that picks up records from EmailStaging table sends emails for every 10 seconds.
Success records are truncated from EmailStaging table
DF_ProcessEmails DF is called to send emails, unsuccessful records are populated into EmailStaging table again.


3894
API Simulation
Below is the list of API’s Consumed by AOM which need to be stubbed in a non-integrated environment.
Below Data transforms would helpful to set up the required data from the API as part of the Simulation Response
 CustomerPartyList
(GPCL)TIL REST CustomerPartyListSim
ulationActivityCustomerPartyListSimulatio
nResponseVFUK-FW-AOMFW-Int-TIL-
CustomerPartyListAPI
ProcessedServiceList
(GPSL)TIL SOAP ProcessedServiceList
SimulationActivityProcessedServiceListSimul
ationResponseVFUK-FW-AOMFW-Int-TIL-
ProcessedServiceListAPI
CheckRetentionEligibi
lity (CRE)TIL SOAP CheckRetentionEligibil
itySimulationCheckRetentionEligibilityStu
bResponseVFUK-FW-AOMFW-Int-TIL-
RetentionEligibilityAPI
Get Stock Availability
(GSA)TIL SOAP StockAvailabilityAPISi
mulationActivityGSASimulationResponse VFUK-FW-AOMFW-Int-TIL-
StockAvailabilityAPI
GetOutOfBundleChar
ges(OOBCharges)TIL REST OOBChargesSimulatio
nActivityOOBChargesSimulationRes
ponseVFUK-FW-AOMFW-Int-TIL-
OOBChargesAPI
CatalogueSync( PM Tool REST CatalogueSyncSimulat
ionActivityCatalogueSyncSimulationR
esponseVFUK-FW-AOMFW-Int-PMT-
CatalogueSyncAPI
SalesOrder (CSO) TIL REST SalesOrderSimulation
ResponseSalesOrderSimulationRespo
nseVFUK-FW-AOMFW-Int-TIL-
SalesOrderAPIService API SourceAPI
TypeActivity Name Data Transform Name Data Transform & Activity
Applies To Class


3895
Knowledge Base
The selected root page could not be found.


3896
Creating New Class Mapping for External Table
From the Configure button the Designer studio as shown below.
Select the Database Class Mapping option as shown below
Click on New External Database Table Class Mapping button to create a new Class for the external table as part of this activity below
rules are created in the Ruleset and version provided which is latest ruleset version of the AOMFW-Database.
Provide the Table Name and schema information as below
Provide Ruleset Name (should be AOMFW-Database) and Version and the ClassName to be created.
Class Name can be updated to suite your requirements


3897
 Map the columns to the properties.
Primary Key columns defined on table would automatically be selected as Keys.
Search for the class from the Search box in the Designer Studio
Select the Database Table rule from the above search results.
1. Ruleset (RS) should always be AOMFW-Database
Default value is AOMFW Ruleset needs to be changes to AOMFW-Database
2. Schema name should be empty
By default, schema name will be populated which is aom in this case


3899
Frequently Used / Useful Pega Functions
 Utilities.SizeOfPropertyList(ClipboardPr
operty aProperty)Returns the size of the property (scalar or
list/group)Get the length of an atomic property or the
number of elements in this list or group
property, returns number of elements. If this
method fails, 0 is returned.
   N a m e D e s c r i p t i o n U s a g e


3900
How to use Simulations in Service Connector Rules
Simulations is an OOTB feature provided by Pega Platform to configured the stub responses for the connectors developed in Pega Platform
which depend on the availability of the external services. These can be used to test various scenarios using the stub data before connecting
to the actually service in dev/test environments.
All connectors rules types Rest/SOAP/JMS/MQ supported by Pega Platform comes-in with built in feautre to configure the simulation
activity which is available at the bottom of the connector rule on the Service Tab
From the Records-->Integration-Connectors-->> Select the Required Connector Type
Select any Service Connector and Click on the Service tab as shown below.
Down at the bottom of the rule, you can see Simulations button.
When you click on the Simulations button, below screen is displayed.


3901
Click on the + button/icon to add the simulation activities.

Connect Simulator Properties

Simulation Activity Activity name of an activity that simulates the results of the connector rule
Global Enables system-wide use of the simulator whenever flow execution reaches the connector shape. When
enabled along with a User Session, the User Session overrides the Global simulator.
User Session The simulation occurs only when the flow is started by the logged-in user. The User Session overrides a
Global simulator.
Clear Local Click to clear the User Session option from all Simulation Activities.
Clear Global Click to clear the Global option from all simulation activities. This option is not available if the production
level of the system is 5.
Apply Changes Click to apply changes to the Connect Simulator.
Close Click to close the Connect Simulator form.Field Description


3902
Clearing the Simulations
From the Configure Menu Item, Select Integration-->Connectors-->Connector Destinations & Simulations

From the above screen
User can check all the active simulations
User can disable individual simulation by selecting them
Disable or Clear all the simulations across the system.


3903
Service REST Features PoC
End Requestor When Done
Use fast processing
Execution mode
Request Processor
Service Monitoring
Enable service SLA  with fallback activity
OpenAPI
Lightweight clipboard mode
Method is read-only
Automation
Automation Rules
Rest Service Automation

End Requestor When Done
On the Context tab of the Service Package form, select Stateful when you want to maintain a clipboard across second and subsequent
service requests.
Select Stateless to perform a simple calculation from inputs: the service request arrives, your activity performs a calculation, then send
the response, and nothing you've done is needed to process later service requests..
On the Service tab of the Service SOAP form, the End requestor when done check box has no impact on stateless services. Regardless
of the check box setting, when a service completes, the requestor is not destroyed so that Process Commander can re-use it for later
service requests, thereby avoiding the overhead of creating another requestor.
For stateful services, select the End requestor when done check box only on a service that is the last one of a series of requests.
This indicates that you're finished with the requestor, so that it can be destroyed. Earlier requests in the series have the box cleared, so that
the same requestor is used throughout.

Use fast processing
Enable the 'Use Fast Processing' option in the Connect-REST Response tab for a method as applicable. This field is displayed when JSON
is selected in the 'Map from' field.
For complex JSON structures, if the Clipboard structure exactly matches the JSON structure, selecting this field improves processing
speed. For this option to work, follow the below guidelines when configuring the Data model:
1. The JSON property names and the Clipboard property names must match.


1. The JSON property names and the Clipboard property names must match.
2. The JSON tree structure and the Clipboard tree structure must be similar.
3. The scalar arrays in JSON must be mapped to the Clipboard as page lists.
4. Multi-dimensional arrays must be mapped into page lists of page lists with the same embedded property names. Map multi-dimensional
arrays into page lists of page lists with the same embedded property names.
Page groups, value groups, and Java objects are not supported.
When using the 'Use Fast Processing' option, the JSON mapping does not work for a property that leverages the pzExternalName property


3904
qualifier to map the value to the Clipboard.
Note: When we use that option in the Response mapping, pxObjClass parameter is returned within the response object.

Execution mode
Execute synchronously – Select this option if you want the service to run the request immediately.
Execute synchronously (queue on error) – Select this option when you want the service to queue the request for asynchronous
execution only if processing fails while executing the service activity.Note: If no processing errors occur, the result is the same as a normal
synchronous request. If a processing error occurs, the error details are stored in a Service Request Processor data instance ( D a t a - A d m i n -
R e q u e s t P r o c e s s o r - S e r v i c eclass), along with the request data that was originally mapped to the clipboard. The service returns the Queue
Item ID to the external application, and the request is either reprocessed automatically by an Agent configured for queue processing, or
manually by a system administrator.
Execute asynchronously (queue for execution) – Select this option when you want the service to queue the request for asynchronous
execution, return the Queue Item ID to the external application, and end the service call while the processing starts.Note: Choose this
option only when a Service Request Processor data instance ( D a t a - A d m i n - R e q u e s t P r o c e s s o r - S e r v i c eclass) exists with a key that matches
the Service Package key part of the service rule. This means that when the queued service request executes, the execution is performed
with the authorization profile of the service.
For more information, see How asynchronous service processing works.

Request Processor


For more information, see How asynchronous service processing works.

Request Processor
The list in this field displays only the request processors that are defined for the same service package as this service rule.
Use service request processor instances to specify:
How to handle the queued service request objects
Which queue to use
How many times to run the requests if they fail the first time
Whether to store the request object with the results of the processing after the processing is finished.
Note: If you select Execute asynchronously (queue for execution) in the Execution mode field, or you configured a Queue
When condition on the Response tab of the service rule, you must also select the name of the service request processor (the instance of
( D a t a - A d m i n - R e q u e s t P r o c e s s o r - S e r v i c eclass)).
For more information, see How asynchronous service processing works.
For more information, see Service Request Processor data instances.


3905

Service Monitoring
To specify whether to monitor this rule, and whether to include the clipboard state when monitoring, in the Service monitoring field,
click Properties.
The service/EnableGlobalMonitoring dynamic system setting with owning ruleset Pega-IntegrationEngine, can be set to On, Off,
or Deferred (the default). When set to On, all REST services in the system are monitored. When set to Off, no REST services in the
system are monitored. When set to Deferred, you can configure monitoring on the service package or individual service level. If the setting
does not exist, the default behavior is the same as if it is set to Deferred.
 To enable monitoring for this rule, in the Select service monitoring field, select Yes.
1.  If you enable monitoring and you want to include the state of the primary data page in the monitoring results, in the Capture clipboard
state field, select Yes.
2.  Click Submit.
For more information, see Service REST Monitoring.


3907

Enable service SLA with fallback activity
You can select this option to configure a fallback activity for a time-out. For example, when the service activity is not finished after a
configured amount of time and the maximum number of violations has occurred, the fallback activity is called. No further requests are
attempted until the retry interval has passed. If the next attempt is successful, normal processing is resumed.
If you select Enable service SLA with fallback activity, the following options are displayed:
Maximum duration for service activity (milliseconds) – Enter the amount of time, in milliseconds, after which the service activity is
considered to have failed. The default is 500 milliseconds.
Maximum consecutive violations – Enter the number of SLA violations that must occur before the fallback activity is called. The
default is 3.
Retry interval (seconds) – Enter the amount of time, in seconds, to wait before attempting to process the service activity. The default is
10 seconds.
Also, ‘Use application settings’ can be selected to configure production-level-specific run-time settings for the same parameters:


3908
OpenAPI
Use the OpenAPI tab to view the auto-generated OpenAPI Specification (OAS) documentation that describes the REST services that are
included in your service package. The OpenAPI tab displays the REST services in YAML and Swagger.
The OpenAPI tab is available in both REST service rule forms and service package rule forms:
In REST service rule forms, use the OpenAPI tab to view the OAS documentation that was generated for an individual REST service
rule.
In service package rule forms, use the OpenAPI tab to view the OAS documentation for all the service REST rules included in a specific
service package

Lightweight clipboard mode
Improve clipboard performance in Service REST processing by using the Lightweight clipboard mode option.
https://community.pega.com/knowledgebase/articles/whats-new-pega-platform/improve-service-rest-processing-performance-using-
lightweight-clipboard-mode-82
https://community.pega.com/sites/default/files/help_v84/procomhelpmain.htm#rule-/rule-service-/rule-service-rest/service.htm
https://collaborate.pega.com/question/lightweight-clipboard-mode-pega-84-rest-service

Method is read-only
You can select this option to indicate that each use of this service does not count as a service invocation under the terms of your license
agreement.
For more information, see License compliance.

Automation
Automation Rules
Automations are Pega-supplied rules that you can use in Case Designer, flows, and activities to perform specific tasks, for example, to
move a case to the next stage. You can view an automation rule to understand its inputs, outputs, and implementation; you cannot create
a new automation rule.
You can use automations in utilities in flows and as steps in Case Designer. When you are prompted to select an automation, all


automations in your application are listed, not just automations for the applies to context that you are in. You can also use automations in
activities by using the Call-Automation method.
For more information, see Automation.
Rest Service Automation
The ability to create automations is restricted in Pega Platform 8.4. You can take advantage of this capability in an upcoming Pega
Platform release.
Create a request for your service so that you can define an external API over REST that customers can call for their application. To create
the request, select an automation, and map the request headers, resource path parameters, and query string parameters, and request


3909
message data to the inputs of the automation.
For more information, see Creating a request for POST, PUT, and PATCH methods by using an automation implementation.
https://community.pega.com/sites/default/files/help_v84/procomhelpmain.htm#rule-/rule-obj-/rule-obj-activity/shipped-automations-ref.htm


3910
Is Case Runnable
IsCaseRunnable is one of the core features of AOM functionality which is responsible for checking the case dependencies. When a
particular case is invoked it loads the respective case dependencies AOMConfig and then checks if any of those dependant cases is
running if so then the case will be routed to Snooze until the dependant case is completed.
 Below is the design of the feature implemented in AOM.
1. Activity initially gets the status of the current initiated case using the CaseType & ConfigName(CaseSubType+ CaseType) AOM Configs.
If the supplied CaseType is not found on the AOMConfig Table then an exception will be thrown notifying that its not supported CaseType
and the case will be moved to Pending-Investigation.

2. CaseDependencies are loaded into memory for the CaseType and ConfigName(CaseSubType+ CaseType) . If the supplied CaseType is
not Found or CaseDependencies are empty it means that the current case doesn’t depend on any other case to complete. Hence
isCaseRunnable is set to true and the case continues. An important point to be noted here is that CaseType can have as itself as a
dependency which means no two same case types can running in parallel.
3. Using, Custom java function SplitString the CaseDependencies comma-separated value is converted to a ValueList and stored in the
case level property TextValueList.
4. Activity loops through all the CaseDependencies CaseType and gets the case status of each case type. If any of the CaseType is not
Completed then the process will terminate the loop and isCaseRunnable will be set to false so that the current case will be the routed to


Snooze and waits for the dependant case to be completed. If all the cases are set to Completed status then isCaseRunnable is set to true
and the case can continue execution.
 BatchNBA CaseStatus Completed
CCDExtractor CaseStatus CompletedConfigName ConfigType ConfigValue
SpineLoader CaseDependencies CCDExtractor,MSLoader,SpineV2Loader,BatchNBA
SpineV2Loader CaseDependencies CCDExtractor,MSLoader,SpineLoader,BatchNBA
CCRLoader CaseDependencies CCDExtractor,BatchNBAConfigName ConfigType ConfigValue


3911
Common Utilities
Below are the common utility activities to support or work around any of the below-concerning issues mentioned below. All the activities are
on VFUK-FW-AOMFW-Work
 DeleteCorrupte
dRuleActivity pzInsKey
(Corrupted Rule pzInkey from User Context)Activity can be run if a rule can neither
be discarded nor checked-in.
Activity needs to be run from the same
user context who is facing the issue
MoveClassRul
eActivity className: Name of the class Rule
targetRulesetName: Target RulesetName
targetRulesetVersion: Target Ruleset VersionActivity will move the class rule to
another ruleset

RefactorRules
etRulesActivity SourceRulesetName: Ruleset Name from where rules should be
deleted
SourceRulesetVersion: Ruleset Version from where rules should
be deleted
TargetRulesetName: Ruleset Name into which rules should be
archieved
TargetRulesetVersion:Ruleset Version into which rules should be
archieved
DeleteOrWithdraw: Purge Type Delete/Withdraw from the source
rulesetThis activity will pruge/deleted the rules
from the source version and move it
archieve ruleset.
This activity is run after every release to
move the rules from AOMFW-Testing
into AOMFW-Testing-Archive( this rules
set is part of another POC application)
so that the rule can be retrieved if
required
UnlockRuleset
VersionActivity RulesetName : Name of the Ruleset
RulesetVersion: Ruleset VersionActivity is used to un-lock the ruleset, if
the password used to lock the ruleset is
not working or forgot. Please use
activity this carefully.
WithdrawAllRul


not working or forgot. Please use
activity this carefully.
WithdrawAllRul
esForClassActivity TargetRulesetName: Target TargetRulesetName where the
withdrawn rules will be created
TargetRulesetVersion: Target TargetRulesetVersion where
withdrawn rules will be created
ClassName : Name of the ClassActivity picks up all the rules created on
the Class provided as parameter and
withdraws all of them in the Target
RulesetName & RulesetVersion
ChangePropert
yDatatypeActivity ClassName : Name of the Class Rule
PropertyName: Name of the Property Rule
TargetRulesetName: Target RulesetName where the new rule to
be created
TargetRulesetVersion: Target TargetRulesetVersion where the
new rule to be createdActivity programmatically updates the
Property Type of the existing and create
the new rule in the TargetRulesetName
& TargetRulesetVersion N a m e R u l e P a r a m e t e r s D e s c r i p t i o n


3912
Documentation Template

 <<Describe functionality/actions performed by the activity >>
Applies To <<APPLIES_TO_CLASS>>
Ruleset <<RULE_SET_NAME>>
Input
Parameters<<INPUT_PARAMETER_1>>
<<INPUT_PARAMETER_2>>
Output
Parameters<<OUTPUT_PARAMETER_1>>
<<OUTPUT_PARAMETER_2>>
Error
Handling<< Explain all the error handling implemented as part of this activity>><<ACTIVITY_NAME>>


3913
Dynamic System Settings - Server Restart
Server Restart is required if the DSS change If its on Pega-Engine Ruleset.
For more details on this DSS you can go through the following article provided below.

https://community.pega.com/knowledgebase/articles/security/84/configuring-java-injection-check

This DSS will require a server restart as this is present in the Pega-Engine Ruleset.
Not all the DSS will require a server restart but it will depend on the DSS if its is a Engine level change or application level.

Following is an article that provides details on when to perform a restart to app server.
https://community.pega.com/knowledgebase/articles/pega-platform-troubleshooting/when-restart-application-
server#:~:text=Restart%20Required%3A%20System%20changes,-Restart%20the%20application


3914
Pega Unit Test Case Design & Limitations
Overview:
Overview:
Pega Unit Test Framework Sections:
Steps to create & run an automated test
Limitations:
The Design Approach:
This document expains the limitations that Pega Unit Test case and design approach to be followed to build end to end test cases for Data
Pages, Activities.
Pega Unit Test Framework Sections:
Steps to create & run an automated test
1.  Run the rule you want to create a test case for
Open the rule and manually run it first
Once you are satisfied with the output, you are ready to create an automated test for it
2. Convert the run to a test by selecting “Convert to test” option on the run window
3. Give proper description, explaining what the test is for
4. Add steps to setup test data
You can go to the “Setup/Clean-up” tab of the test case to define steps that would generate the necessary test data for the test to
execute the rule
There are multiple options to create test data. You can run a data transform, create and load objects, load data pages, run an activity,
copy pages from clipboard
Limitations:
The Rules created within the same class heirarchy where the test case created is only possisble to invoke , For example If we have any
Activity ot Data Transform that is created to set global configuration settings in the same application or other application is not possible to
invoke from test data setup.
1. Apply Data Transform - It allows only to invoke the Data Transform rules created on the same class hierarchy.
2. Execute Activity - It allows only to invoke the Activity rules created on the same class hierarchy..


3915

3. Setup the test data pages using setup data by copying the existing page from clipboard provided the pages are not removed at the end
of the activity rule execution or creating new page, However its not possible to access the pages created when the rule is being executed to
validate page results.

4.  The tool does not allow us to perform any computations and assign the properties for the newly created page. So we will be verifying the
hot coded results instead of having computations and verify the Rule Calculations.


3916
All above te same applicable for After Rule Execution.
The Design Approach:
1. The Rules we build should have switch to check whether the Rule is being executed for realtime application or Unit Testing
a. Introduce a Seperate Configuration DataType (TestConfig) in Testing Ruleset which will not deploy in high end environments
b. Enable/Disable Pega Unit for each functional area (i.e PC, OC, BDC) using the configuration.
c. Check in the activity rule whether Pega Unit rule is enabled or disabled.
2. The Rule should not be deleting the Pages that are deriving after logic execution from Clipboard If the Rule is configured for Unit Testing.
a. On Clean step of activity, check if the rule is enabled for Unit testing then skip the step.
3. Create Pages with expected results and compare with actual result pages to verify the Rule Logic.
4. Build a ErrorConfig which captures the expected errors on negative scenarios that will be used to verify the negative results.


3917
How to Induct new resources into App Team
Check with resources,
if both Microsite and Gmail Adqura accounts are created,
 if not check with the NPE team (Asit) to create both with the right access privileges
Add the resource to other relevant Teams Group like Vodafone UK, AOM-Tech-Team, VFUK Tasks, NPE Support etc
Announce or Welcome the team member by posting in AOM-Tech-Team
Introduce the New member on Friday’s VFUK Weekly call
Go through the working etiquette
How to use teams
How to update wiki on Teams
Process for Applying for leave
Setup Vodafone Access
Send an email to Piers and NPE team for below access to the development environment
Pega Dev Studio
SSH Access to check logs
Database Access
Need to get the Vodafone account  ( Piers is the contact person)
Setup the bastion access for both Database and SSH for a dev instance
Overview of the AOM Sprint Model
Sprint timing and releases
Adhering to coding standards
Code Reviews/ Unit test Cases
Updating Adqura and Vodafone confluence pages
Getting started with the start pack videos for the AOM introduction
Go through the confluence and code base for understanding
Buddy/ Pair Program for one/two releases until the new resource can contribute/work individually


3918
AES 256-bit Encryption
Advanced Encryption Standard (AES) uses a symmetric algorithm, which means the same key is applied for both encryption and
decryption. AES differs from other encryption types in that it encrypts data in a single block, instead of as individual bits of data.
AES comes in 128-bit, 192-bit, and 256-bit implementations, with AES 256 being the most secure.
AES-256, which has a key length of 256 bits, supports the largest bit size and is practically unbreakable by brute force based on current
computing power, making it the strongest encryption standard.
How AES encryption works
AES includes three block ciphers: AES-128, AES-192 and AES-256.
AES-128 uses a 128-bit key length to encrypt and decrypt a block of messages, while AES-192 uses a 192-bit key length and AES-256 a
256-bit key length to encrypt and decrypt messages. Each cipher encrypts and decrypts data in blocks of 128 bits using cryptographic keys
of 128, 192 and 256 bits, respectively.
Symmetric, also known as secret key, ciphers use the same key for encrypting and decrypting, so the sender and the receiver must both
know -- and use -- the same secret key.
There are 10 rounds for 128-bit keys, 12 rounds for 192-bit keys and 14 rounds for 256-bit keys. A round consists of several processing
steps that include substitution, transposition and mixing of the input plaintext to transform it into the final output of ciphertext.
AES 256 algorithm using CBC mode
In Cipher Block Chaining (CBC) mode, an initialization vector (IV) is added to the first block of plaintext before encryption and the resultant


ciphertext is added to the next block of plaintext before encryption, and so on. The IV has the same size as the block that is encrypted.
In Cipher Block Chaining (CBC) mode, the first block of the plaintext is exclusive-OR'd (XOR'd), which is a binary function or operation that
compares two bits and alters the output with a third bit, with an initialization vector (IV) prior to the application of the encryption key. The IV
is a block of random bits of plaintext. The resultant block is the first block of the ciphertext. Each subsequent block of plaintext is then
XOR'd with the previous block of ciphertext prior to encryption, hence the term “chaining.” Due to this XOR process, the same block of
plaintext will no longer result in identical ciphertext being produced.
Decryption in the CBC mode works in the reverse order. After decrypting the last block of ciphertext, the resultant data is XOR'd with the
previous block of ciphertext to recover the original plaintext.


3919
To perform AES 256-bit encryption in CBC mode, first we need to generate random Secret key and Initialization vector(IV). The following
function generates 256-bit secret key and 128-bit IV.
GenerateAES256IVAndSecretKey function
This function generates random 256-bit secret key and 128-bit initialization vector for AES 256 algorithm and doesn’t have any input
parameters and returns a string
Packages imported:
java.security.SecureRandom;
javax.crypto.KeyGenerator;
javax.crypto.SecretKey;
javax.crypto.spec.IvParameterSpec;
javax.crypto.spec.SecretKeySpec;
java.util.Base64;
Java:
try {
SecureRandom random = new SecureRandom();
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(256,random);
// Generate Key
SecretKey key = keyGenerator.generateKey();
SecretKeySpec keySpec = new SecretKeySpec(key.getEncoded(), "AES");
String encodedKeySpec = Base64.getEncoder().encodeToString(keySpec.getEncoded());
// Generating IV.
byte[] IV = new byte[16];
random.nextBytes(IV);
IvParameterSpec ivSpec = new IvParameterSpec(IV);
String encodedIV = Base64.getEncoder().encodeToString(ivSpec.getIV());
return ">>>> 1. SecretKey for AES256 (256 bit) : " + encodedKeySpec + " >>>> 2. IV for AES256 (16 byte) : " + encodedIV;
}  catch (Exception ex) {
   throw new RuntimeException("Error in GenerateAES256IVAndSecretKey: " + ex.getMessage(), ex);


3920
}

Output:
>>>> 1. SecretKey for AES256 (256 bit) : tbAjBEtdzBD9xSBDCxL1JQBvaPZ5lCSvNNZGPT7UrjE=
>>>> 2. IV for AES256 (16 byte) : i1z2gJ0D8CxeLXOyexVObA==
After generating Secret key and IV, we can encrypt the data by using the following function
EncryptUsingAES function
This function has three input parameters initializationVector, encryptionKey and dataToEncrypt which performs AES encryption and returns
Cipher Text (String).
Parameters:
initializationVector - This is IV generated in above function (Ex: i1z2gJ0D8CxeLXOyexVObA==)
encryptionKey - This is Secret Key generated in above function (Ex: tbAjBEtdzBD9xSBDCxL1JQBvaPZ5lCSvNNZGPT7UrjE=)
dataToEncrypt  - This is a Plain Text that needs to be encrypted (Ex: Vishnu)
Packages:
javax.crypto.Cipher;
javax.crypto.spec.IvParameterSpec;
javax.crypto.spec.SecretKeySpec;
org.apache.commons.codec.binary.Base64;
Java:
String errorPrefix = "EncryptUsingAES: Mandatory Input Validation Failed";
aomfw_aomutilities.InputValidation("initializationVector", initializationVector, errorPrefix);
aomfw_aomutilities.InputValidation("encryptionKey", encryptionKey, errorPrefix);
aomfw_aomutilities.InputValidation("dataToEncrypt", dataToEncrypt, errorPrefix);
try {
byte[] ivBytes = Base64.decodeBase64(initializationVector.getBytes("UTF-8"));
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);


IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec(Base64.decodeBase64(encryptionKey.getBytes("UTF-8")), "AES");
cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);
return new String(Base64.encodeBase64(cipher.doFinal(dataToEncrypt.getBytes("UTF-8"))));
} catch (Exception ex) {
  throw new RuntimeException("Error in EncryptUsingAES: " + ex.getMessage(), ex);
}
Output:
6nElsUYyvJx8NI05e3g0UA==
Now we can decrypt the Cipher Text and get plain text using the following function
DecryptUsingAES function
This function has three input parameters initializationVector, encryptionKey and dataToEncrypt which performs AES encryption and returns
Plain Text (String).


3921
Parameters:
initializationVector - This is IV generated in above function (Ex: i1z2gJ0D8CxeLXOyexVObA==)
encryptionKey - This is Secret Key generated in above function (Ex: tbAjBEtdzBD9xSBDCxL1JQBvaPZ5lCSvNNZGPT7UrjE=)
dataToEncrypt  - This is a Cipher Text that needs to be decrypted (Ex: 6nElsUYyvJx8NI05e3g0UA==)
Packages:
javax.crypto.Cipher;
javax.crypto.spec.IvParameterSpec;
javax.crypto.spec.SecretKeySpec;
org.apache.commons.codec.binary.Base64;
Java:
String errorPrefix = "DecryptUsingAES: Mandatory Input Validation Failed";
aomfw_aomutilities.InputValidation("initializationVector", initializationVector, errorPrefix);
aomfw_aomutilities.InputValidation("encryptionKey", encryptionKey, errorPrefix);
aomfw_aomutilities.InputValidation("dataToEncrypt", dataToEncrypt, errorPrefix);
try {
byte[] ivBytes = Base64.decodeBase64(initializationVector.getBytes("UTF-8"));
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec key = new SecretKeySpec(Base64.decodeBase64(encryptionKey.getBytes("UTF-8")), "AES");
cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);
return new String(cipher.doFinal(Base64.decodeBase64(dataToDecrypt)));
} catch (Exception ex) {
  throw new RuntimeException("Error in DecryptUsingAES: " + ex.getMessage(), ex);
}
Output:
Vishnu
***WIP***


3922
Working with SSH
Once after login into SSH,
Type sudo -i command to get into root folder
Type alias to check shortcuts for all other commands which we used on daily basis
** WIP **


3923
Mashup
Description
Creating a Mashup
Mashup Attributes
Customizing Mashup
Inputs
Parameters
URL
Actions
Loading the Mashup
Sample Mashup
Create new case Mashup loads directly
Create new case Mashup with HTML  form
OpenW orkItem Mashup with HTML  form
ADO 675811 - CCS 22.2 || T3/SUP02/SIT2 || AOM Assisted Upgrades || V ADR is not launching with correct URL  in second Instance - ALM 73537
Description
Pega Web Mashup enables you to embed Pega application content or functionality within a web page or mobile application. Mashup can perform some actions related to case and actions commonly
defined inside a mashup include:
Create a new case
Display a page
Get next work
Open an assignment
Open a case by ID
Open a case by Handle
Open a case by URL
Creating a Mashup
Goto Application->Channels and Interfaces
Click on Mashup
Please refer below Mashup page screen shot to configure Mashup and check below links for more details.
Creating a mashup


3924
Click on “Generate mashup code” to generate mashup.
We can see iframe code and Mashup code, copy mashup code and embedded in the host page.
Mashup Attributes
data-pega-gadgetname Name for the mashup gadget which can be used to perform actions VADRNewUpgrade
data-pega-action Action for the mashup createNewWork / openWorkItem
data-pega-action-param-classname Case applies to class and applicable for createNewWork action VFUK-VADR-Work-Upgrade
data-pega-action-param-workid It holds the work item id and applicable for openWorkItem action. U-1001 / [page/id/CaseId]
data-pega-isretained To retain the state of the case after the user refreshes the browser that displays the
mashuptrue OR falseAttribute Purpose Values


3925
Please refer Mashup attributes  for more details
Customizing Mashup
We need to customize the generated mashup based on the external system requirements
Inputs
We can inputs to the mashup so that
Parameters
Parameters for the mashup, if any, need to be defined in the d a t a - p e g a - a c t i o n - p a r a m - p a r a m e t e r s attribute. These parameters need to be populated before calling the mashup script. Parameter values can
be set in host pages and if the values need to be set from a form elements then the accepted format is “[page/id/elementId]”.
For e.g. "OwnerAccountNumber":"[page/id/AccountNumber]", and “AccountNumber” is a reference to input element in the page (DOM elements) or id of the HTML element which hold the
AccountNumber. The prefix “page/id” is a Pega format and is same for all parameters.
URL
We need to replace “pegacs.data.dev.vodafoneaws.co.uk” in all the urls “https://pegacs.data.st.vodafoneaws.co.uk/prweb/app/vadr” with environment specific pega URL
We need to replace “pegacs.data.dev.vodafoneaws.co.uk” with target environment pega URL

Actions

Loading the Mashup
If we integrate mashup in HTML, we can either want the action to occur when the Gadget Manager first loads the page or whether the action waits until action invoked manually based on a requirement
like on button click. The attribute “ d a t a - p e g a - i s d e f e r l o a d e d” will control this and it accepts 2 values:
false- will load mashup on HTML form load
true - it needs to be loaded manually.


false- will load mashup on HTML form load
true - it needs to be loaded manually.
Use the below doAction function in JavaScript to load the mashup when needed e.g. in on button click function. We need to send
GadgetName - Name for the mashup gadget defined in data-pega-gadgetname.
ActionName - Action for the mashup like load

Please refer Mashup JavaScript page actions  for more Mashup JavaScript actions.
Sample Mashup
Create new case Mashup loads directly
 data-pega-isdeferloaded Specifies whether the action occurs when the Gadget Manager first loads the page or
whether the action waits until action invoked manuallytrue OR false
data-pega-applicationname Name of the Application VADR
data-pega-threadname The name of a thread in which the mashup action takes place Upgrade
data-pega-channelID This is the channel identifier. Please use the value provided. MASHUPaf9c64a149264e6daaa7a517119d8544
data-pega-resizetype Resize mode for the mashup. For fixed we need to specify the size in height and width.stretch OR fixed
data-pega-url Target environment URL of the mashup application in the system https://<pegacs.data.dev.vodafoneaws.co.uk>/prweb/
app/vadr/
data-pega-action-param-parameters JSON object for passing additional parameters such as user-defined parameters '{"OwnerAccountNumber":<"
[page/id/AccountNumber]">,
"Channel":<“[page/id/Channel]">,"Division":
<“[page/id/Division]”>,"UpgradingServiceNumber":
<“[page/id/ServiceNumber]”>,"ContactId":
<“[page/id/ContactId]”>}'


<“[page/id/ContactId]”>}'
Format :pega.web.api.doAction(”<GadgetName>”,”<ActionName>”)
1pega.web.api.doAction ("VADRNewUpgrade" ,"load");
1
2
3<!-- ********************** Begin Pega content ********************** -->
<script src ='https://pegacs.data.dev.vodafoneaws.co.uk/prweb/app/vadr/?pyActivity=pzIncludeMashupScripts' </script>
<div


3926
Create new case Mashup with HTML form

OpenWorkItem Mashup with HTML form

4
5
6
7
8
9
10
11
12
13
14
15
16
17data-pega-gadgetname  ='VADRNewUpgrade '
data-pega-action  ='createNewWork '
data-pega-action-param-classname  ='VFUK-VADR-Work-Upgrade '
data-pega-isretained  ='false'
data-pega-isdeferloaded  ='false'
data-pega-applicationname  ='VADR'
data-pega-threadname  ='Upgrade'
data-pega-channelID  ='MASHUPaf9c64a149264e6daaa7a517119d8544 '
data-pega-resizetype  ='stretch'
data-pega-url  ='https://pegacs.data.dev.vodafoneaws.co.uk/prweb/app/vadr/ '
data-pega-action-param-parameters  = '{"pzSkinName ":"UpgradeSkin ","pyMashupSkeletonName ":"pyDefaultMashupSkeleton ","OwnerAccountNumber ":"456237","Channel":"BACKOF
</div>
<!-- ********************** End Pega content ********************** -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40<script>
function runCase()
{
var myForm = document.getElementById("myForm");
if (myForm.style.display == "none")
{
myForm.style.display = "block";
}
else {
myForm.style.display = "none";


myForm.style.display = "block";
}
else {
myForm.style.display = "none";
}
pega.web.api.doAction("VADRNewUpgrade","load");
}
</script>

Account name: <input type="text" id="AccountNumber " name="AccountNumber " />

Channel: <input type="text" id="Channel" name="Channel" />

Division: <input type="text" id="Division " name="Division "/>

ServiceNumber: <input type="text" id="ServiceNumber " name="ServiceNumber "/>

ContactID: <input type="text" id="ContactId " name="ContactId "/>

<button onclick="runCase() " name="load case ">Run Case </button>

<div
data-pega-gadgetname  ='VADRNewUpgrade '
data-pega-action  ='createNewWork '
data-pega-action-param-classname  ='VFUK-VADR-Work-Upgrade '
data-pega-isretained  ='false'
data-pega-isdeferloaded  ='true'
data-pega-applicationname  ='VADR'
data-pega-threadname  ='Upgrade'
data-pega-channelID  ='MASHUPaf9c64a149264e6daaa7a517119d8544 '
data-pega-resizetype  ='stretch'
data-pega-url  ='https://pegacs.data.dev.vodafoneaws.co.uk/prweb/app/vadr/ '


data-pega-action-param-parameters  = '{"pzSkinName ":"UpgradeSkin ","pyMashupSkeletonName ":"pyDefaultMashupSkeleton ","OwnerAccountNumber ":"[page/id/AccountNumber] ",

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

        Case ID: <input type="text" id="caseid" name="caseid" />

     <button onclick="loadCase() " name="load case ">Load Case </button>

<div data-pega-gadgetname  ='PegaGadget '
data-pega-action  ='openWorkItem '
data-pega-action-param-workid  ='[page/id/caseid] '
data-pega-isdeferloaded  ='true'


3927

ADO 675811 - CCS 22.2 || T3/SUP02/SIT2 || AOM Assisted Upgrades || VADR is not launching with correct URL in second Instance - ALM 73537

1. UI introduced new style attributes which addresses the UI popup issue and scrollbar navigation issue.

19
20
21
22
23
24
25
26data-pega-applicationname  ='AOMFW'
data-pega-threadname  ='TestPocMAshup '
data-pega-channelID  ='MASHUP919c1037c44f40118f9d19a5a69c2190 '
data-pega-resizetype  ='stretch'
data-pega-url  ='https://pega.data.test.vodafoneaws.co.uk/prweb/app/AOMFW/ '
data-pega-action-param-parameters  ='{"pzSkinName ":"AOMFW","pyMashupSkeletonName ":"pyPerformSkeleton "}' ></div>
<!-- ********************** End Pega content ********************** -->
1
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65<!-- Licensed to the Apache Software Foundation (ASF) under one or more
2  contributor license agreements.  See the NOTICE file distributed with
3  this work for additional information regarding copyright ownership.
4  The ASF licenses this file to You under the Apache License, Version 2.0


4  The ASF licenses this file to You under the Apache License, Version 2.0
5  (the "License"); you may not use this file except in compliance with
6  the License.  You may obtain a copy of the License at
7
8      http://www.apache.org/licenses/LICENSE-2.0
9
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12cdcd  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
-->
<!DOCTYPE HTML><html lang="en"><head>
<meta  name="viewport " content="width=device-width, initial-scale=1.0 " charset="UTF-8">
<title>Apache Tomcat Examples </title>
</head>
<!-- Begin:Changes wrt ADO 675811, PEGA SR INC-211199, INC-216779 -->
<style>
/*default 1024x768 @100%*/
#pegaCustom{
height: 615px !important;
max-height:800px!important;
}
/*laptop 1920x1024 @150%*/
@media (min-width: 1200px) {
#pegaCustom{
height: 580px!important;
max-height:1100px!important;
}
}
</style>
<!-- ********************** Begin Pega content ********************** -->
<script>
pega.Mashup.Communicator.register(pega.Mashup.hostActionsProcessor);
</script>
<!-- Begin:Changes wrt ADO 675811, PEGA SR INC-211199, INC-216779 -->


<script src ='https://pegacs.data.dev.vodafoneaws.co.uk/prweb/app/vadr/?pyActivity=pzIncludeMashupScripts '></script>
<div id="pegaCustom " <!-- Changes wrt ADO 675811, PEGA SR INC-211199,  INC-216779  -->


3928
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83data-pega-gadgetname ='VADRNewUpgrade'
data-pega-action ='createNewWork'
data-pega-action-param-classname ='VFUK-VADR-Work-Upgrade'
data-pega-isretained ='false'
data-pega-isdeferloaded ='false'
data-pega-applicationname ='VADR'
data-pega-threadname ='Upgrade'
data-pega-channelID ='MASHUPaf9c64a149264e6daaa7a517119d8544'
data-pega-resizetype ='fixed' <!-- Changes wrt ADO 675811, PEGA SR INC-211199, INC-216779 -->
data-pega-url ='https://pegacs.data.dev.vodafoneaws.co.uk/prweb/app/vadr/'
data-pega-action-param-parameters ='{"pzSkinName":"UpgradeSkin","pyMashupSkeletonName":"pyDefaultMashupSkeleton","OwnerAccountNumber":"Q9S42c6ixGPxA1v/WrZOqQ==","Age
</body></html>


3929
Articles
Dataflow Partition Calculation
Escape special characters in JSON as part of Rest API
Purging Dataflow W orkItems
Dataflow Partition Calculation
The formula to calculate the number of parallel processing is : numOfNodes * numOfThreads * scaliabiliyFactor.
Community Links
Data Flow distribution not evenly distributed between nodes | Pega
Support Center
Escape special characters in JSON as part of Rest API
When a property contains double quotes (") as part of its value, the generated JSON object fails to escape the special character. This
creates incorrect JSON objects during a REST Request. This occurs no matter where the quotes are in the string.
Community Links
Generated JSON fails to escape special characters | Pega

Purging Dataflow WorkItems
By default dataflow, workItems from the landing pages would be deleted after 30days and below DSS can be updated to hold the run details
for longer.

json/escapeSpecialCharacters Pega-IntSvcs trueDSS Name Owning Ruleset Name Value
dataflow/run/maxDaysToKeepRuns Pega-Decision-Engine <<VALUE>>
 DSS Name Owning Ruleset Name Value


3930
Extend IH Table
Steps to Extend IH Table:
Scenario: You want to update interaction with customer property LastName
1. Create the property in the appropriate IH Table
2. Create a new LastNameproperty in PR_DATA_IH_FACT Table
3. Create the property in the appropriate IH class
a. Create a new LastName property in Data-Decision-IH-Fact Class
4. Update Data-Decision-IH-Configuration.pyInteractionHistoryConfiguration with the new property(LastName).
a. Save as the Data Transform.pyInteractionHistoryConfiguration to your Artifacts ruleset and update it to add your new property

5. Re-save the corresponding Database Table rule for the IH class
a. Open the Data base rule for Data-Decision-IH-Fact and don’t  update anything and just click save.

To Use this property in Srategies
Create a SR Property with same name (LastName)


3931
Database ER-Diagram
Tables - Description
Entity Relationship Diagrams


3932
Tables - Description


3933
Entity Relationship Diagrams

VFUK AOM Product Catalogue ERD v0.5
AOM LDM (with …
25 Sep 2020, 03:15 PM0.5.pdf
 VFUK AOM Off …
14 Aug 2020, 10:15 AMERD.pdf
 VFUK AOM Pro …
25 Sep 2020, 03:17 PM0.5.pdf
 AOM_Product_ …
14 Aug 2020, 10:13 AM.5.xlsx


3934
AOM LDM (with sourcing) ERD v0.5


3935
Data Model based on the PDTT / Offer Feed


3937
Reference Material
KT Sessions
AOM Issue Triage Questionnaire
Pega Support Request Guide
Coding Best Practices
Triage activities
STF FlowExpand all   Collapse all


3938
KT Sessions
Monthly Ops Handover Before Go Live
AOM
VADR
Weekly KT  Sessions to V odafone L2/L3 Teams
Weekly Config Club ( Thursdays)
Monthly Ops Handover Before Go Live
This session is scheduled just before the release going live so that the VF L2/L3 team is aware of what's coming for them to support.
Below is the list of items as part of the agenda to be covered
A O M
1. Integration with TIL Rest/SOAP Services
2. Introduced new Rest API
3. Loader Case Modifications
a. New Sub Type
b. New Entity/File
c. Changes to Existing Implementation
4. Extractor Case
a. New File Generation
b. New Sub-Type
5. Housekeeping Case
a. New Subtype
6. New Case Additions
7. Watchdog
8. Job Schedulers
9. AOM Config
10. AOM Error Codes
V A D R
1. Integration with TIL Rest/SOAP Services
2. Integration with AOM Rest Services
3. New Case Changes
4. Mashup Changes
5. VADR Config
6. VADR Error Codes
Weekly KT Sessions to Vodafone L2/L3 Teams
This meeting is to share the knowledge on the new AOM features to be supported by Vodafone L2/L3 teams.
KT is more inclined towards supporting the features developed like what all they need to check in case of any errors and alert the respective
team in case of any issue.


3939
Weekly Config Club ( Thursdays)
This meeting is to share the details Optimization and Capability team with respect to the Ruleset versions used and the PM tool catalogue
versions for the upcoming release and also let the Optimization team know about them when they expect the new feature to work ok the
Optimization changes.
App team contribution towards this meeting is to see, if there are any issues in the process and raise them.


3940
AOM Issue Triage Questionnaire

Loader Case
BatchNBA  Case
Extractor Case
AOM API
TIL API
Minimum details on ADO

Loader Case
1. Can you please check, if the Operator who triggered the Case is pointing to the right access-group?
2. Can you please check the error message in the Pega logs?
3. Can you please check the aom_error and aom_audit tables for this issue?
4. Can you please check the admin_spine_load_status table?
a. If a record exists in this table with the same file name loader will skip the file and no data will be loaded
5. Can you please check, if the applicable ResumeCaseFlow Agent is running?
BatchNBA Case
1. Can you please check, if the Operator who triggered the Case is pointing to the right access-group?
2. Can you please check, if the SMS and Email campaigns are scheduled and the last run is successful before triggering the batch NBA
case?
3. Can you please check if the respective dataflow work item id is available in AOMConfig and the dataflow landing page, both need to
complement each other for each dataflow which needs running from the case
4. Can you please check the error message in the Pega logs?
5. Can you please check the aom_error and aom_audit tables for this issue?
6. Can you please check, if the applicable ResumeCaseFlow Agent is running?
Extractor Case
1. Can you please check, Is the Operator who triggered the Case is pointing to the right access-group?
2. Can you please check the error message in the Pega logs?
3. Can you please check the aom_error and aom_audit tables for this issue?


3. Can you please check the aom_error and aom_audit tables for this issue?
4. Can you please check the extractor_status table and check if the status is completed for the respective CaseId?
5. Can you please check, if the applicable GenerateExtract Agent is running?
AOM API
1. Please validate the request JSON using online tools or Notepad++ Plugins, ( 500 error is possible outcome for an invalid input JSON as
well)
2. Can you please check, if the API Operator who triggered the API is pointing to the right access-group?
3. Can you please check the error message in the Pega logs?
4. Can you please check the aom_error and aom_audit tables for this issue?


3941
TIL API
1. Can you please check, if the API Operator who triggered the API is pointing to the right access-group?
2. Can you please check the error message in the Pega logs?
3. Can you please check the aom_error and aom_audit tables for this issue?
4. Can you please check, if the Simulation Data Transform or Dataset (STF Data) are right for the scenario being tested?
Minimum details on ADO
1. Exact Error Message from the log file
2. aom_arror and aom_audit records for the test which would help us understand the request and response in the case of API and where it
went wrong in other cases like case failures etc
3. Details of scenario with expected result and current result.
4. The request or file used


3942
Pega Support Request Guide
Submit a Pega Support Request
Go to https://community.pega.com/support link and click Support → Submit a Support Request

User needs to populate below 4 steps for a new pega support request
Create

What type of issue is being experienced? Application behaviour incorrect
Application performance issue
Application security issue
Seeing a display error
A documentation error
Error in log file
Install or Upgrade or Migration Issue
Service not responding
System infrastructure issue
System not accessible
User interface
 The type of the issue that user is having for the corresponding
support request.
Pick up one of the available options with respect to the issue that you
have
Short description  NA The short description of the issue that user want to raise
Ensure that you specify the issue in high level with couple of words
How severe is the issue? Sev1: Production down. Please call Pega Support The production system is down or inaccessible. Severity 1 only applies
to production systemsQuestion Available Options Definition


3943

Details
 Sev2: Prevents users from performing significant portions of
work The reported problem causes disruption of a major feature or function of
the system that has significant impact on production but does not result
in extended downtime. A Severity 2 problem can also severely impair
development efforts. A Severity 2 problem prevents users from
performing work or significant portions of their work, and it affects a large
number of users
Sev3: Product not working as desired This is the default severity level for submitted Support Cases. The
reported problem involves a feature or functional failure that results in
the Pegasystems product not working as described in the
documentation. A Severity 3 problem prevents or delays users from
performing some tasks
Sev4: Does not prevent performing tasks The reported problem is a presentation or product usability defect with
little to no business impact. Severity 4 problems do not prevent users
from performing tasks. Examples of Severity 4 problems include
typographical errors and user interface element misalignment
What is the impact on work? Blocker: Work cannot be completed Select this option if the issue is blocking the development or release
High: Major disruption to work Select this option if the issue has an impact on critical or frequently used
parts of the system
Medium: Minor disruption  to work Select this option if the issue has a minimal impact on the functionality
which causes a slight deviation in the requirement
Low: Can still perform daily tasks Select this option if the issue does not have any impact on the
functionality like cosmetic and the desired results can be easily obtained
by working around
Describe the issue NA Describe the issue that you have in detail
Explain the expected results and the actual result you are seeing
Try to explain the issue in step by step and specify the error
logs/observations clearly


Try to explain the issue in step by step and specify the error
logs/observations clearly
Specify screen shots to be able to represent the issue visually which
will make the Pega Support more clear if available
What are the steps to reproduce the issue? NA Define the steps to be able to reproduce it again
Specify screen shot if available
Is the issue consistently reproducible? Yes
NoSelect one of the option if the issue consistently reproducible or
intermittent
When was the issue first observed? Start of development
 Select this option if the issue was existing from the start of
project development started
Recently Select this option if the issue has occured with your recent
development activities and has not occurred previously
Describe recently implemented changes NA Specify the changes that has been done as part of
environment and development activitiesQuestion Available Options Definition


3944

Environment
 Is the issue specific to an individual user? Yes
NoSelect Yes if the issue is occuring for a specific a user  else
select No
Has a patch or version upgrade been applied in the past 30
days?Yes
NoSelect Yes if there is any upgrade operation has been done
in the past 30 days else No

Describe attempted solutions NA Describe all the attempted solutions to be able to sort out
the issue step by step
Document the errors in detail as you have attempted
solutions if available
Error messages received NA Specify the attachment names and give some explanation
for each of them
Primary application List of available applications defined for the client  Select the application that issue occurs
Deployment Client Cloud
On Premise
Pega CloudSelect the option wrt your environment exists in which
hardware category

Environment type Production Select this option if the environment type is Production
Staging Select this option if the environment type is Pre-Production
DevTest Select this option if the environment type is Development or
Test environment
Product List of available products provided by Pega such as Pega
Platform, Pega MarketingSelect the most related product that your issue exists
Generally, It is specified as Pega Platform
Platform List of available pega platform versions such as 8.4.1, 8.5.1 Go to Dev Studio → PEGA (on the right bottom corner)
Add attachments Screen shot of issue Please add screen shot of the issue you are having in
design/run time if available
PegaRULES.log Go to Dev Studio → Configure → System → Operations
→ Logs → Log Files → PEGA
Copy all the logs into a txt file from the start of the issue
Apply above steps for each node as above if the issue is


Apply above steps for each node as above if the issue is
being produced by sytem users which may occur in any
node
Hot fix scan Go to Dev Studio → Configure → System → Release →
Hotfix Manager → Download Scan Result
Tracer Logs Run the tracer before reproducing the issue and pause
once the issue preproducedQuestion Available Options Definition


3945

Communication Preferences

Maintain a Pega Support Request
Update AOM- Pega SR Details sheet wrt the latest status and notes for the corresponding Pega Support Request
Support Response Times
The Support response times specified in the following table are the general Service Level Agreements (SLAs). NOTE: All Pega Cloud Services clients receive Premium support for
Severity 1 issues.

Standard communication for non-Severity-1 Support Cases are via email. If a client wishes additional people to be contacted about an issue in addition to the standard administrator
contacts, telephone numbers must be provided for those contacts.Click on save button on tracer and check the
downloaded file

Video record of issue ??
Primary contact NA Update the primary contact that Pega Support will be contacting if required
Ensure that you have specified the phone number which Pega Support will contact on phone
rather than mail in case of any urgency
Additional contacts NA Add additional contact and phone numbers if any other parties inside the organization should be
mailed as wellQuestion Available Options Definition

Severity 1Premium 24 hours, 7 days a weekDirect communication with the client within 15
minutes of the Support Case being
submitted by the client by telephoneAt a minimum, daily updates or
mutually agreed upon frequency
Standard 5 days a week
(Business Week)Direct communication with the client within
one business hour of the Support Case
being submitted by the clientAt a minimum, daily business day
updates or mutually agreed upon
frequency

Severity 25 days a week (Business Week) Direct communication with the client within
one business hour of the Support Case
being submitted by the clientAt a minimum, daily business day
updates or mutually agreed upon
frequency


updates or mutually agreed upon
frequency

Severity 35 days a week (Business Week) Direct communication with the client within
two business hours of the Support Case
being submitted by the clientAt a minimum, updates every five
business days or mutually agreed
upon frequency

Severity 45 days a week (Business Week) Direct communication with the client within
four business hours of the Support Case
being submitted by the clientAt a minimum, updates every five
business days or mutually agreed
upon frequencyLevel Support Initial Response Support Case Updates


3946

Client Response Times
The following table specifies the required client response times based on the Support Case severity:
A Support Case will be closed if GCS does not receive any response from you after contacting you three (3) times over the course of five (5) business days by either telephone or email.
Your Support Case will be closed when it has been referred to Pega Consulting or another party outside of Pega.
Your Support Case will be downgraded or closed if you do not respond in a timely manner to the Client Support Engineer (CSE) working your case.
Frequently Asked Questions
 1 Within 1 to 4 business hours Severity 1 Support Case is closed New Support Case is
opened with Severity 2 classification
2 Within 5 to 8 business hours Support Case downgraded to Severity 3
3 In 5 business days Support Case is closed
4 In 5 business days Support Case is closedSupport Case Severity Level Client Response Required Otherwise This Action Is Taken
How can I upload a file which exceeds maximum size allowed? A new storage link is provided once the SR is opened, please upload all the files into that
location
Is it possible to reopen a case? Users can re-open an existing Support Request if it is resolved and occurred again.
Go to corresponing SR → Actions → Reopen
How can I get status email for an SR although i am not an additional contact? Go to corresponing SR → Follow
How can I update the Severity for an SR? Users can not update the status of the SR
You need to comment your Severity request which will be evaluated and applied by a
CSE if applicableQuestion Answer


3947
Coding Best Practices
Design
Code Review
Development
Rule Naming Conventions
General
Function Usage
Documentation
Rule Types
CaseT ypes
Activities
Step Labels
Data Transforms
Process Flows
Classes and Properties
Database Class mappings
Connect SQL
Data Pages
Report Definitions
Functions
Integration-Services
Rest API
Integration-Connectors
Rest Connector
SOAP  Connector
Linux
Working with Linux
Design
1. All the details which are part of the ADO Story/Task should be part of the design, Every detail is important
2. Design should also highlight the impact on the existing implementation (if any) and detail on the resolution as well
3. Use Macros in confluence, if you are using any code snippets in the design
4. While creating a new service, API should have plural properties for Complex Repeating items (like LineItems), if not, we should discuss
with Suraj
Code Review
1. All Code need to be reviewed related to that task
2. All the check-in comments should explain the changes performed along with the ADO number
3. All the unit testing results/evidence should be recorded and presented in the code review
4. Update the build log with all the rules to be packaged as part of the build
5. Update the build long instructions to the deployment if applicable
6. Adqura confluence page should be updated with all the documentation along with the new error codes added as part of the task
7. Relevant Vodafone confluence page(s) should be also be updated.


3948
Development
Rule Naming Conventions
1. Rule Name should not contain redundant information like RulesetName, RuleType, Application Name etc
2. Rules created in the testing ruleset should be deleted after the tests are completed
3. Input parameters to report definition, obj-browse should not be part of output unless absolutely required
4. Using Plural Rule Names should be used depending on if they actually represent multiple data items or not, an example would be
ClassName rules should be Singular in most of the cases.
5. Please follow the rule naming convention as per the Rule Naming Conventions ( Recommendations from Pega)
6. Please don’t save-as, use create new always for any new rule as Save-as uses the current rule as a base. Also, pega creates Relevant
Records which pega uses internally and impact other functionality
7. Database table and column names should be in lower case and each word is separated with an underscore (“_“). Please refer to SQL
Naming conventions for more details.
8. Please follow Java naming conventions and indentations whereever you are writing java code(in functions) in Pega.
General
1. Error Code variables should be Integer type
2. Refer to Rule Types and Rulesets page to understand which rule type need to create in which ruleset.
Function Usage
1. Use @AOMUtilities.GetCurrentPegaTimestamp() function to set any DateTime properties
2. Use @AOMUtilities.IsPageListEmpty function to check if pageList is empty
3. Use @String.EqualsIgnoreCase function in case of any string comparisons
Documentation
1. Add release number and ADO task number as a label to confluence the design page
Rule Types
CaseTypes
1. AOMFW Application is password-protected for any updates. Hence you need to use the password to update as mentioned below


2. Please remove the Password Protection on the application rule before adding a new case type
a. Un-check the Require password to update the application on the Integration & security tab of the application Rule
3. After creating the new Case Type, set the password-protected back onto the application rule.
4. Please re-use the existing process flows, if it fits the requirement you are looking for.
Activities
1. All activities should contain START and END log message steps with Logging Level Set to Info with Label and Description set
appropriately.
2. Label Name for the Step should not be more than 3 characters
3. All clipboard pages created as part of the activity should be removed at the end of the activity and Label it as Clean.
4. Privilege Class on the Security Tab of Activity rule should be the same as Applies-To Class unless there is special use.
5. Security Tab of Activity Rule


3949
a. Disable Allow direct invocation from the client or a service option
b. Enable Require authentication to run
c. Set Activity Type as Activity
6. Remove/Delete the un-used Local Variables and Pages Defined on the Page & Classes Tab
7. Add the Description and Usage on the History Tab for the Activity rules to describe what the activity does with possible errors/exceptions.
8. Define default Error Step(Err)  to catch All errors and set description as Primary Catch-all Error Handler
9. In any case of failure or exception in any step within the activity should use StepStatusFail when rule in the jump step condition and jump
to Error Step (Err)
10. Definite meaningful page names as per the context and void suffixing with numbers like Work4/Test1 etc
11. Activity Step Comment/Description should explain WHY the step is added like initializing the variables for later use and if it is more of a
standard step like Page-Copy or Page-New just explain WHAT is being done in the step. Also, add the JUMP logic to the description for
readability purposes.
12. All Function invocations should contain the LibraryName along with the function name as
@<<LIBRARY_NAME>>.FUNCTION_NAME(parameters)
13. Be careful while using VFUK-FW-AOMFW-Work.CreateErrorLog activity so that sensitive customer information should not be pushed
into log files, hence disabling the SkipLogToFile activity parameter
a. use @AOMUtilities.GetCurrentPegaTimestamp() function to set ErrorTimestamp parameter
b. Process Name= Activity Name( if the name is generic then prefix the Applies To Class Name Ex. SMSStaging.Process)
14. Invoking VFUK-FW-AOMFW-Work.CreateAuditLog activity
a. use @AOMUtilities.GetCurrentPegaTimestamp() function to set StartTimestamp/EndTimestamp parameters


a. use @AOMUtilities.GetCurrentPegaTimestamp() function to set StartTimestamp/EndTimestamp parameters
b. Process Name= Activity Name( if the name is generic then prefix the Applies To Class Name Ex. SMSStaging.Process)
15. All error handling messages should have a specific error code (integer type) defined in both the implementation and the document: A
OM Error Codes
16. In a loop, avoid using <<CURRENT>> in multiple places and use page-copy instead
17. When using page-copy method, jump to Error Step( Err) in case of any failure or any exception using StepStatusFail
18. All obj-browse should be limited to a specific value to avoid loading huge data into memory
19. Input parameters to obj-browse should not be part of output unless absolutely required
20. Use pxResultCount field to check Page List length for RD-List & Obj-Browse (this property is not available for Data Flows)
21. As part of Datapage Error handling, @Default.hasMessages(<<DATA_PAGE_NAME>>) needs to be checked for any errors after the
data page has been loaded/copied/retrieved. This is a workaround for a Pega bug where data page error is thrown only for the first time
and from the second time of access it uses cached error hence we could possibly missout on an error scenario
22. Add unit tests if possible,
23. All the parameters applicable to the context of invocation to CreateErrorLog and CreateAuditLog Activities should be passed
24. Use cached @AOMUtilities.GetCachedAOMConfigValue function, if there is no specific reason to have a real-time value
25. Expression in WHEN Rules on the steps should not throw an error as Pega terminates the execution if there is an error in the expression


and it's not caught by StepStatusFail. Avoid using functions that throw errors
26. Bubble up the error from the child activities and log them in parent only unless there is a specific need to log in child activities
27. Make sure you give as much as possible information in the Error Message to analyse easily if there is an issue
28. Use PageGroup property and avoid multiple loops when updating items in Lists, which is more performant.
29. Top-level class VFUK-FW-AOMFW is mapped to aom_config to map the connect SQL rules.


28. Use PageGroup property and avoid multiple loops when updating items in Lists, which is more performant.
29. Top-level class VFUK-FW-AOMFW is mapped to aom_config to map the connect SQL rules.
30. Avoid using Schema Name and Table Name in ConnectSQL rules and use class name instead.  Below is the query in the ConnectSQL
rule
1select count(*) from {Class:VFUK-FW-AOMFW-Data-SMSSendQueue}


3950
Step Labels
Please find below the common Activity step label and description which needs to be followed as part of best practices
Data Transforms
1. Define Parameters, even if the parameter page is passed from the invoking rule for more readability
2. Add Comment from Action to describe the step
3. Expression in WHEN Action step should not throw an error as Pega terminates the execution if there is an error in the expression and it's
not caught by StepStatusFail. Avoid using functions that throw errors.
4. If possible, create multiple Data Transform rules and invoke them in the main Datatransform for more readability and maintainability
5. Add unit tests if possible
6. Disable “Call superclass data transform” check box.
Process Flows
1. Follow the rule name conventions to create a Process Flow rule
2. Never check in the flow with DRAFT Mode On as it will fail in the Production Environment
3. Each process should contain Start and End shape
4. Add names to the Connectors where possible
5. Add the Audit Note where necessary
6. Add Likelihood appropriately and should not be left empty
7. All Error Handling should be handled by routing to NotifySupport unless specified
8. Always use a single END shape and avoid using multiple END shapes
9. Always the complete process flow should be made visible on a single screen to avoid scrollsStart Log Start of Activity This label and description should be used for the first step in the activity and
LoggingLevel should be set to Info
End Log End of Activity This label and description should be used for the last step in the activity and
LoggingLevel should be set to Info
Fin Succesfull finito step, jump to
<<STEP_LABEL>>This label and description should be used for the last step in the activity
Err Primary Catch All Error Handler Default Exception Handler in the activity.


Err Primary Catch All Error Handler Default Exception Handler in the activity.
Clean Remove Pages created in this
activityRremove all the pages created as part of the activity
QAL Log to Audit Table Invokes the CreateAudit Activity
QEL Log to Error Table Invokes the CreateError Activity
EOL End of Loop
BLErr Business Logic Error + <<
ADDITIONAL_MESSAGE>>
BLVErr Business Logic Validation Error + <<
ADDITIONAL_MESSAGE>> Label
NameLabel Description Comments


3951
Classes and Properties
1. Class Name length should not exceed more than 56 characters
2. Select the Classtype Concrete/Abstract more appropriately(In most of the cases it would be Concrete)
a. Make classes as Concrete if the class is actually holding the data.(e.g. the class used on UI to show data)
3. Add the Description and Usage on the History Tab for the Class rules to describe the class and where it is used.
Database Class mappings
1. While mapping a DB table to a class, ensure date properties are Date property type & time stamp properties are DateTime
Connect SQL
1. Rule name should be an action/verb what the rule is performing like purgedata, selectdata etc
Data Pages
1. The caching strategy should be defined in Load Management Tab
2. Set the required Scope of the data page
3. Input parameter should be passed by enabling the Pass current parameter page option in the Source section which will be helpful if
there is a change in the parameters in future
Report Definitions
1. Disable Paging unless required
2. Check Maximum Numbers of Rows to retrieve under General data access settings. Pega Defaults to 500 (if not value is set). Setting it to
0 will retrieve all records matching the filter criteria.
3. Report Definition should be part of the AOMFW-Database Ruleset.
4. Input parameters to report definition should not be part of output unless absolutely required
Functions
1. Check if there is a custom function already which matches the requirement
2. All pages created as part of the function should be removed
3. Java code should be formatted and applicable steps should complement with the right comments.
4. Regular expressions should be defined under the library - static variables-  to disable to compile it in each run (Pattern. compile(regex) )


5. Use RunTimeException, not PRAppRunTimeException
6. Add Documentation on the history tab, on what the function does. any exceptions, examples
7. Use aomfw_aomutilities.InputValidation function for input validations
8. When there is only one mandatory validation, set the error message directly in the input validation step without setting an ErrorPrefix
Integration-Services
Rest API
1. Enable the ‘Use fast processing' option only, if the respective request/response doesn’t contain page groups, value groups, and Java
objects as these are not supported by fast processing in the request or response
2. GET Method has a restriction of 2048 characters URL Length. Please check the Query Parameters before choosing this Method


3952
Integration-Connectors
Rest Connector
1. User Simulation to return the Stub data
SOAP Connector
1. Set the SOAPaction header with the right value from the API Spec
2. Parse XML ( Request Mapping)
a. Make sure all the elements are mapped with Node Namespaces and XSD Base Type
3. XML Stream (Response Mapping)
a. Make sure all the elements are mapped with Node Namespaces and XSD Base Type
Linux
Working with Linux
1. Never run any commands as the root user


3953
Rule Types and Rulesets
Below is table explains the mapping between the type of rule and ruleset in which it needs to be created
Data Page
Report Definition
Data Set
Class (Concrete/Abstract)
Properties AOMFW-Database Managed by App Team
Case Type
Process Flow
Flow Action
Correspondence
Framework/Case Activity
Function
Library
Access Group
Access of Role to Object
Access Role NameAOMFW Managed by App Team
Connect REST
Connect SOAP
Parse XML
XML Stream
Integration Class
Integration Properties
Integration ActivitiesAOMFW-Int Managed by App Team
Section
Paragraph
Harness
Portal
Navigation
Skin
UI Class
UI ActivityAOMFW-UI Managed by App Team
Strategy AOMFW-Artifacts Managed by Logic TeamRule Type Ruleset Name Comments


3954
gy g yg
Dataflow
Decission Table
Event Strategy
Propostion Filter
Volume Constriant
SMS Treatment
Email Treatment
Action ( Offer Flow)
Email Section
 AOMFW-Business-Artifacts
Testing Rules
 Data Transforms
Test Harness ActivitiesAOMFW-Test-Cases Managed by App Team
Contain all the runtime rules created by Pega
Marketing Campaigns (Batch/Realtime)AOMFW-PM-Campaigns Managed by App Team
Contains the Decision data rules and Data
would be popualted by Propostion Manager
Tool(PM Tool)AOMFW-PM-Catalogue Managed by Logic Team
Contains rules created by the Pega Marketing
Context create or updateAOMFW-PM-Artifacts Managed by App Team


3955
Creating Data Type
Create Database Table
Create Class Mapping
Update Class Rule
Update Database Table Rule
Create Data Type
Create Data Page
Verify Data Type Created
Rules to be included in Build Log
Relevant Records

This page explains how to create the data type for the class mapped to an external database table.
Create Database Table
Send Request to Database Team for creating the table under relevant Schema
For the table to be created in the right place, ask Database Team to create the table under relevant Schema with below sample details.
When the table is created by Database Team, this table and the class should be mapped to each other.
Create Class Mapping
For the Designer Studio,  Please navigate to Configure > Data Model > Classes & Properties > Database Class Mappings
Click ‘New External Database Table Class Mapping’ button on the following page.Column Name Column Type
product_type (PK) varchar2(50)
identifier (PK) varchar2(50)
attributes  text (to store name-value json)Table Name product_attributes


3956
On the opening pop-up;
1. Fill in all fields except Schema name carefully. Make sure ‘Schema name’ is empty to avoid any conflicts in the Production environment.
2. Do not forget to update the class name with a more meaningful one.
3. When the table name is selected in the section Step 1, columns of the table and property details for them will be populated on the
section Step 3.
Update property names according to the appropriate pattern,
Check primary keys,
Check property types,
Tick the checkbox on the Map column.


3957
Then click ‘Submit’. Now, the class rule and the database table rule are created. Also, under created class you will see a data transform
‘pyDefault’ which we do not need is created automatically. Do not forget to delete it.


3958
Update Class Rule
Check the class rule.
1.  Update captions on Keys section.
2. Click the ‘Test connection’ button to check class the mapping.
3. Check mapping on pop-up page opening.


3959
Check ‘External Mapping tab’ and the whether properties and their types are correct.
Update Database Table Rule
1. It is seen that the ruleset is AOMFW default. Click ‘Edit to update the ruleset as AOMFW-Database.
2. Make sure ‘Schema name’ is empty.
3. Click ‘Test connectivity’ button to check connection.


3960
Create Data Type
Data Type > Expand mark > Add data type
1. Select Existing Data Type
2. Select the class created newly. Then, submit.
Now, the data type is created:


3961
Go to Record tab > Click Configure source button.
On the following page:
1. Check properties and keys.
2. Deselect “Generate single, list and savable data pages”. It is default but we do not need to all of the most of the time. We will create the
data page we need ourselves in the following steps.
3. Change the Database from ‘CustomerData’ to ‘AOM'.
Now, we need to check the database information. Go to Settings tab > Click Database information
Create Data Page
Click the dots near the data type > Click Add data page


3962
On Definition tab:
Fill in Structure & Mode & Scope fields on the Data page definition section as needed.
Fill in Source as Lookup with the class we just created on the Data Sources section.
On Load Management tab:
1. Select the appropriate Access group.
2. Fill in the Refresh Strategy section as needed.


3963
On Parameters tab:
Define parameters.
Now return to the Definition tab to add the parameters. Click Parameters > Add the parameters > Submit


3964
Then save the data page.
Verify Data Type Created
1. We need to see a storage symbol
2. We need to see the data page symbol
3. We need to see the data page under the data type
4. Go to the Records tab
5. Add records to the data type
1. Fill in the parameters
2. Run the data page
3. Check the result


3965
Rules to be included in Build Log
We need to add related information (Ruleset, Class, Database Table, Data Type, Relevant Records) to the Build Log as shown below.
Relevant Records
Relevant records are instances of the class ‘Data-Tag-RelevantRecord’
1. Open the instances of the class ‘Data-Tag-RelevantRecord’
2. Filter Context class with the class you created
3. Open each of record > Actions button > View XML > copy their pzInsKey values


3967
Versioned and Un-Versioned Rules
[ Versioned Rule  ] [ Un-V ersioned Rule  ] [ Manually Created Rules  ]
Versioned Rule
Any rule in pega which has a check-out option on the rule from is the versioned rule, which means there can be multiple versions of the rule
in the system and the rule resolution algorithm would take care of choosing the right version of rule.
Examples of Version rules are :
Property
Dataset
Activity
Connect-Rest

Un-Versioned Rule
Any rule in pega which doesn’t have an option check-out and can only do Save from the rule from is the un-versioned rule, which means
there will be a single version of the rule in the system
Below is the list of frequently used un-versioned rules
Application
Class
Database Table –  Maps the external table to an existing class rule
RuleSet
RuleSet Version
Access of Role to Object
Library

Manually Created Rules
There are few rules which need to be manually created in pega and can’t be moved from environment to environment easily hence they to
be created manually as part of deployment steps
Below are the examples
Dataflow WorkItem ( Realtime/Batch)
Pega Marketing Campaign


3968
Triage activities
This page shows what activities/tasks should be carried out whilst part of the triage team.
Manage Pega labs Environment
Housekeeping Testing Rules
Generate Release Rules Summary PDF
Generate Release Rules Summary with change log Excel
Manage Pega labs Environment
The Pega labs system gets shut down after 3 days of inactivity therefore we must restore or after 60 days the system will permanently be
deleted.
You will receive the below email which would be trigged after 3 days of inactivity with a link and credentials to restart the machine.
We will receive an email when the system is about to be shut down and there is an option to “Launch System Dashboard” -
https://ee.lab.pega.com/admin/quer /sendsysteminfo.phtml?hashid=a5d49d0dfa653b546e840d2c06bc0edb
After clicking enter the credentials which will also be displayed in the email
Then click “Restore my instance” which will restore the system. An email will be sent once the operation is complete and wait for 5 minutes
before trying to access the system again.


3969
Housekeeping Testing Rules
This activity is run after every release to move the rules from AOMFW-Testing into AOMFW-Testing-Archive
( this rules set is part of another AOMPOC application) so that the rule can be retrieved if required.
Add AOMPoC: Administrators access group to your operator
switch to the AOMPoC application
Run the RefactorRulesetRules  proving the input and output ruleset versions
Verify, if the rules are moved.
Generate Release Rules Summary PDF
For each release, a PDF format summary of all the rules in AOM and VADR needs to be provided to Vodafone.
An example report definition rule   - AllRulesForReleaseR301 in VADR and AOM applications
After each release,
Save-As of the previous report definition and rename it as AllRulesForReleaseRxxx according to the release number and it should be
in the Data-Rule-Summary class.
Update report definition with the applicable ruleset versions for that release and also the branch names to retrieve all the rules
Update the header with the required release number
Export the PDF and save it in the below location ( release specific folder )
Example: \OneDrive\Adqura\Vodafone UK - AOM-Tech-Team - AOM-Tech-Team\Release Management\R3.01
Generate Release Rules Summary with change log Excel
For each release, a Excel format summary of all the rules in AOM and VADR needs to be provided to Vodafone.
An example report definition rule   - GetAllRulesCommitLogForR403 in VADR and AOM applications
After each release,
Save-As of the previous report definition and rename it as GetAllRulesCommitLogForRxxx according to the release number and it
should be in the History-Rule class.


should be in the History-Rule class.
Update report definition with the applicable ruleset versions for that release and also the branch names to retrieve all the rules
Update the header with the required release number
Export the Excel and save it in the below location ( release specific folder )
Example: \OneDrive\Adqura\Vodafone UK - AOM-Tech-Team - AOM-Tech-Team\Release Management\R4.03