Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Panel
nameblue

The Glossary Mechanism provides a way to translate CRM.COM terms to any language that is supported by CRM.COM. This section explains how to use the mechanism when creating custom pages and is applicable from CRM.COM R9.0.0 onwards.

 

What does this section cover?

Table of Contents

General Idea

All CRM.COM terms that appear on screen should be replaced in both .xml and .java files with keys. A key must have the following format: key_<unique_phrase> and should always be in lowercase. i.e. key_priceplan, key_price_plan. A key can only be defined once but it can be used multiple times.

...

Properties file is used to store the keys and their translation. Properties file for English translation is named  translation_eng.properties can be found under <project_directory>/Crm/WebContent/labels. Note that all keys must be unique. 

Expand
titleProperties file for English translation
Code Block
languagexml
titletranslation_eng.properties
<properties>
	<comment>eng Translation</comment>
	<entry key="key_life_cycle_state">Life Cycle State</entry>
	<entry key="key_all">All</entry>
	<entry key="key_n/a">N/A</entry>
	<entry key="key_billing_information">Billing Information</entry>
	<entry key="key_view">View</entry>
	.
	.
	.
</properties>

...

Expand
titleNon-translated terms Example

 keys used: key_name, key_alternativecode, key_description

key_alternativecode has not been defined in properties file.

 

Code Block
languagexml
titletranslation_eng.properties
<fieldlist>
		...
		<field>
			<fieldname>PRODUCTTYPES.PRODTYPENAME</fieldname>
			<caption>key_name</caption>
			<summary>true</summary>
			<filter>true</filter>
			<filtercaseinsensitive>true</filtercaseinsensitive>
			<link>page.do?xml=products/type&amp;act=itm&amp;jndi=ejb/CRMUIProductType&amp;fc=loadForm&amp;pv0=((PRODUCTTYPES.PRODTYPEID))&amp;pvc=1</link>
		</field>
		<field>
			<fieldname>PRODUCTTYPES.PRODTYPEALTCODE</fieldname>
			<caption>key_alternativecode</caption>
			<summary>true</summary>
			<available>true</available>
			<filter>true</filter>
		</field>
		<field>
			<fieldname>PRODUCTTYPES.PRODTYPEDESC</fieldname>
			<caption>key_description</caption>
			<summary>true</summary>
			<filter>false</filter>
		</field>
	...
</fieldlist>

Image RemovedImage Added

Summary Pages

This section shows how to use the Glossary Mechanism when creating summary pages.

...

Expand
titleExample


keys used: key_life_cycle_state, key_all


Code Block
languagexml
titleLife Cycle State Search Field
<field>
	<fieldname>LIFECYCLESTATE_FILTER</fieldname>
	<fieldfunction>ACCOUNTSRECEIVABLE.LIFECYCLESTATE</fieldfunction>
	<caption>key_life_cycle_state</caption>
	<summary>false</summary>
	<filter>true</filter>
	<filtertextoption>equal</filtertextoption>
	<fixedlookup>ejb/CRMUIAccountReceivable.getLifeCycleStateOptions:key_all</fixedlookup>
</field>

 

Image RemovedImage Added

Summary Fields

...

Expand
titleExample


keys used: key_life_cycle_state, key_n/a


Code Block
languagexml
titleLife Cycle State Summary Field
<field>
	<fieldname>LIFECYCLESTATE</fieldname>
	<fieldfunction>ACCOUNTSRECEIVABLE.LIFECYCLESTATE</fieldfunction>
	<caption>key_life_cycle_state</caption>
	<summary>true</summary>
	<filter>false</filter>
	<fixedlookup>ejb/CRMUIAccountReceivable.getLifeCycleStateOptions:key_n/a</fixedlookup>
</field>

 

Image RemovedImage Added

 

 

Drill Downs

When defining drill downs in summary pages the following rules must be followed:

...

Expand
titleExample

keys used: key_billing_information, key_view


Code Block
languagexml
titleBilling Information Drill Down
<field>
	<fieldname>BILLINGINFORMATION</fieldname>
	<fieldfunction>''</fieldfunction>
	<caption>key_billing_information</caption>
	<summary>true</summary>
	<fieldtype>label</fieldtype>
	<label>key_view</label>
	<link>drilldown:billing/bills;hidefilters~true~BILLS.ACCRECID~((ACCOUNTSRECEIVABLE.ACCRECID))</link>
</field>

 

Image RemovedImage Added

Actions

When defining actions in summary pages the following rule must be followed:

...

Expand
titleExample


keys used: key_new, key_set_privacy_level

 

Code Block
languagexml
titleSummary page actions
<actions>
		<action>
			<caption>key_new</caption>
			<topmenu>true</topmenu>
			<link>page.do?xml=communications/communication&amp;act=new&amp;jndi=ejb/CRMUICommunication&amp;fc=createButton&amp;pvc=0</link>
		</action>
		<action>
			<caption>key_set_privacy_level</caption>
			<modal>true</modal>
			<link>javascript:displayModalCreate('communications/setPrivacyLevel','ejb/CRMUICommunication','loadPrivacyLevelForm','java.util.ArrayList@[[SummaryComponent_((component))]]','edit',null,'','')</link>
		</action>
	</actions>

 

Image RemovedImage Added

 

Data Entry Pages

This section shows how to use the Glossary Mechanism when creating data entry pages.

 

Definition File

In data entry definition files, all name, label, sidelabel, truelabel, falselabel, tipexpression tags must contain only keys in order for their values to be translated by the glossary mechanism.

...

The following example demonstrates how to make use of the glossary mechanism when defining the title of a data entry page. 

Expand
titleExample

keys used: key_communication


Code Block
languagexml
titleData entry page title
<?xml version="1.0" encoding="UTF-8"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../xsd/dataEntry.xsd">
	<id>communications/communications</id>
	<name>key_communication</name>
	<datapath>number</datapath>
	.
	.
	.
</page>

 Image RemovedImage Added

Main Menu

The following examples demonstrate how to make use of the glossary mechanism when implementing the main menu of a data entry page. 

Expand
titleExample 1

keys used: key_new


Code Block
languagexml
titleNew menu option
<mainmenu>
	<components>
		<component>
				<id>cmpNew</id>
				<name>key_new</name>
				<visiblemodes>read</visiblemodes>
				<hideinmodal>true</hideinmodal>
				<elements>
					<button>
							<id>btnNew</id>
							<name>key_new</name>
							.
							.
							.
						</button>
					</elements>
			</component>
			.
			.
			.
		</components>
</mainmenu>

 

Image RemovedImage Added

Expand
titleExample 2

keys used: key_cmdactions, key_follow_up, key_set_privacy_level

 

Code Block
languagexml
titleActions menu option
<mainmenu>
	<components>
		.
		.
		.
		<component>
				<id>cmpActions</id>
				<name>key_cmdactions</name>
				<visiblemodes>read,edit</visiblemodes>
				<elements>
					<menu>
						<id>menuActions</id>
						<name>key_actions</name>
						<visiblemodes>read,edit</visiblemodes>
						<menuitems>
							<modal>
								<id>mdlFollowUp</id>
								<name>key_follow_up</name>
								<visibilityconditions>
									'[[getValue,java.lang.String,lifeCycleState]]'=='COMPLETED'
								</visibilityconditions>
								.
								.
								.
							</modal>
							<modal>
								<id>mdlSetPrivacyLevel</id>
								<name>key_set_privacy_level</name>
								<visiblemodes>read</visiblemodes>
								.
								.
								.						
							</modal>
						</menuitems>
					</menu>
				</elements>
			</component>
	</components>
</mainmenu>
	

 

Image RemovedImage Added

Components

Component name tag should always contain a key in order for its value to be translated by the glossary mechanism.

 

Expand
titleExample

keys used: key_key_dates


Code Block
languagexml
titleComponent
<component>
		<id>cmpKeyDates</id>
		<name>key_key_dates</name>
		<isgroup>true</isgroup>
		<columns>4</columns>
		<elements>
			.
			.
			.
		</elements>
</component>

 

Image RemovedImage Added

Elements

When defining an element,  labelsidelabeltipexpression tags must contain only keys in order for their values to be translated by the glossary mechanism.

 

Expand
titleLabel Example

keys used: key_type


Code Block
languagexml
titleSelectbox element
<elements>
	<selectbox>
		<id>slbType</id>
		<label>key_type</label>
			.
			.
			.
	</selectbox>
</elements>

Image RemovedImage Added

Expand
titleSidelabel Example

keys used:key_allow_creating_access_tokens_with_no_identifier_and_pass_code


Code Block
languagexml
titlecheckbox element
<elements>
	<checkbox>
		<id>chkOnAllowNoIdentifierPassCode</id>
		<sidelabel>key_allow_creating_access_tokens_with_no_identifier_and_pass_code</sidelabel>
			.	
			.
			.
	</checkbox>
</elements>

Image RemovedImage Added

Expand
titleTipexpression Example

keys used: key_tipexpression_rewards_award_expiration_run_definition_cmp_award_expired_x_days_ago


Code Block
languagexml
titletextbox element
<elements>
	<textbox>
		<id>txtAwardExpiredXDaysAgo</id>
		<tipexpression>key_tipexpression_rewards_award_expiration_run_definition_cmp_award_expired_x_days_ago</tipexpression>
		.
		.
		.					
	</textbox>
</elements>

Image Removed

...

Image Added

Layout File

In the data entry layout files, all name and instruction tags must contain only keys in order for their values to be translated by the glossary mechanism.

...

The following example demonstrates how to make use of the glossary mechanism when defining a section in order for its name and instructions to be translated. 

Expand
titleSection Example

keys used: key_main_information, key_instruction_segments_segment_sec_main_information


Code Block
languagexml
titlesection
<sections>
	<section>
		<id>secMainInformation</id>
		<name>key_main_information</name>
		<instruction>key_instruction_segments_segment_sec_main_information</instruction>
				.
				.
				.
	</section>
</sections>

Image Removed

 

 

 

 

Image Added

Search Pages

This section shows how to use the Glossary Mechanism when creating search pages.

...

  1. searchcaption and label tags should always contain a key in order for their values to be translated by the glossary mechanism.
  2. displaytype tag should make use of keys to define the available search criterion options.

 

...

Expand
titleSearch Page Example

keys used: key_search_accounts_receivable, key_life_cycle_state, key_active, key_suspended, key_terminated


Code Block
languagexml
titlesearch page
<searchcaption>key_search_accounts_receivable</searchcaption>
.
.
.
	<fields>
		<fielditem>
			<field>ACCOUNTSRECEIVABLE.LIFECYCLESTATE</field>
			<label>key_life_cycle_state</label>
			<expression>VALUE</expression>
			<datatype>ftXString</datatype>
			<fieldlen>10</fieldlen>
			<searchcriteria>1</searchcriteria>
			<visible>1</visible>
			<executable>1</executable>
			<displaytype>combobox;;;ACTIVE;key_active;SUSPENDED;key_suspended;TERMINATED;key_terminated</displaytype>
			<indexorder>50</indexorder>
		</fielditem>
	.
	.
	.
</fields>
.
.
.

Image Removed

...

Image Added

Dashboards

This section shows how to use the Glossary Mechanism when creating dashboards.

...

  1. name, description, primaryfieldlabel, groupbyfieldlabel and caption tags should always contain a key in order for their values to be translated by the glossary mechanism.
  2. fixedlookup should make use of a key to define the value that will be displayed when no option is selected from the drop-down list and no filtering is to be made based on the search field.

 

 


Expand
titleSearch Page Example

keys used: key_buy_in_advance_requests_per_duration_and_subscription_type, key_buy_in_advance_requests_per_duration_and_subscription_type_stacked_bar_chart, key_number_of_buy_in_advance_requests, key_view_buy_in_advance_requests_of, key_duraition, key_Subscription_type, key_all


Code Block
languagexml
titlesearch page
<dashboardcomponent>
	<name>key_buy_in_advance_requests_per_duration_and_subscription_type</name>
	<description>key_buy_in_advance_requests_per_duration_and_subscription_type_stacked_bar_chart</description>
	<primaryfieldlabel>key_number_of_buy_in_advance_requests</primaryfieldlabel>
	<groupbyfieldlabel>key_duration,_subscription_type</groupbyfieldlabel>
	.
	.
	.
	<fields>
		<field>
			<fieldname>BUYINADVANCE_PERIOD</fieldname>
			<caption>key_view_buy_in_advance_requests_of</caption>
			<summary>true</summary>
			<filter>true</filter>
			<fixedlookup>ejb/CRMUIBillDashboard.getBuyInAdvanceRequestsPerDurationAndSubscriptionTypePeriodOptions:key_all</fixedlookup>
			<filtertextoption>equal</filtertextoption>
		</field>
	</fields>
	.
	.
	.
</dashboardcomponent>

Image Removed

 Image Added

 

Metadata

Fields

This section shows how to use the Glossary Mechanism when defining metadata fields.

When defining metadata fields name tag should always contain a key in order for its value to be translated by the glossary mechanism.

 

Expand
titleMetadata Fields Example

keys used: key_number, key_description


Code Block
languagexml
titlemetadata fields
<mainfield>
	<id>number</id>
	<name>key_number</name>
		.
		.
		.
</mainfield>
	
<fields>
	<field>
		<id>description</id>
		<name>key_description</name>
	</field>
	.
	.
	.
</fields>
.
.
.

...

When defining metadata entities name tag should always contain a key in order for its value to be translated by the glossary mechanism. 

Expand
titleEntity Example

keys used: key_account_classification


Code Block
languagexml
titleEntity
<entity>
	<id>ACCCLASSIFICATIONS</id>
	<name>key_account_classification</name>
	  	.
		.
		.
</entity>

...

When defining metadata messages, expression tag should always contain a key in order for its value to be translated by the glossary mechanism. 

Expand
titleMessage Example

keys used: key_com_crm_exception_mandatoryfieldexception


Code Block
languagexml
titleMessage
<message>
	<code>COM.CRM.EXCEPTION.MANDATORYFIELDEXCEPTION</code>
	<expression>key_com_crm_exception_mandatoryfieldexception</expression>
	<description>A mandatory field is not specified.</description>
</message>

...

When defining metadata applications, applicationdescription tag should always contain a key in order for its value to be translated by the glossary mechanism. 

Expand
titleApplication Example

keys used: key_the_rewards_application.


Code Block
languagexml
titleApplication
<applications>
	<application>
			<applicationid>REWARDS</applicationid>
			<applicationname>REWARDS</applicationname>
			<applicationdescription>key_the_rewards_application.</applicationdescription>
	</application>
	.
	.
	.
</applications>

...

When defining metadata menu options, name and description tags should always contain a key in order for their values to be translated by the glossary mechanism.

 

Expand
titleMenu Option Example

keys used: key_manage_rewards_participants


Code Block
languagexml
titleMenu Option
<menuoptions>
	<menuoption>
		<id>MANAGE_REWARD_PARTICIPANTS</id>
		<name>key_manage_rewards_participants</name>
		<description>key_manage_rewards_participants</description>
		<menuoptionparentid>REWARDS</menuoptionparentid>
		<menuoptionordernum>3</menuoptionordernum>
		<menuoptionurl>page.do?act=summary&amp;xml=rewards/participants</menuoptionurl>
	</menuoption>
	.
	.
	.
</menuoptions>

Image RemovedImage Added

Modules

This section shows how to use the Glossary Mechanism when defining metadata modules.

...

The following example demonstrates how to make use of the glossary mechanism when defining the common processes of a module. 

Expand
titleModule common processes example

keys used: key_create_reward_scheme, key_create_a_new_reward_scheme.

Code Block
languagexml
titleModule common process
<commonprocesses>
	<process>
		<id>CREATE_REWARD_SCHEME</id>
		<name>key_create_reward_scheme</name>
		<description>key_create_a_new_reward_scheme.</description>
		.
		.
		.
	</process>
	.
	.
	.
</commonprocesses>

...

The following example demonstrates how to make use of the glossary mechanism when defining the additional processes of a module. 

Expand
titleModule additional processes example

keys used: key_activate_reward_scheme, key_activate_a_reward_scheme.


Code Block
languagexml
titleModule additional process
<additionalprocesses>
	<process>
		<id>ACTIVATE_REWARD_SCHEME</id>
		<name>key_activate_reward_scheme</name>
		<description>key_activate_a_reward_scheme.</description>
		.
		.
		.
	</process>
	.
	.
	.
</additionalprocesses>

...

The following example demonstrates how to make use of the glossary mechanism when defining the additional processes of a module. 

Expand
titleModule dashboard components example

keys used: key_rewards_participants_per_scheme_bar_chart


Code Block
languagexml
titleModule dashboard component
<dashboardcomponents>
	<dashboardcomponent>
		<id>PARTICIPANTS_PER_SCHEME</id>
		<name>key_rewards_participants_per_scheme_bar_chart</name>
		<description>key_rewards_participants_per_scheme_bar_chart</description>
		<filename>rewards/participantsPerScheme</filename>
	</dashboardcomponent>
	.
	.
	.
</dashboardcomponents>

...

The following example demonstrates how to make use of the glossary mechanism when defining the reports of a module. 

Expand
titleModule reports example

keys used: key_rewards_participants_balance, key_view_the_wallet_balance_of_each_effective_rewards_participant


Code Block
languagexml
titleModule report
<reports>
    <report>
    	<id>REWARDPARTICIPANT_BALANCE_REPORT</id>
        <name>key_rewards_participants_balance</name>
        <description>key_view_the_wallet_balance_of_each_effective_rewards_participant</description>
        <reportfilename>Rewards/Participants_Balance.crxml</reportfilename>
   </report>
	.
	.
	.
</reports>

...

Note: In Web API's case the name tag should contain the method's name which will not be translated. 

Expand
titleModule Web APIs Example

keys used: key_show_rewards_award_transactions_web_api


Code Block
languagexml
titleModule Web API
<webapis>
	<webapi>
		<id>REWARD_AWARD_TRANSACTIONS_SHOW</id>
		<name>reward_transactions/awards/show</name>
		<description>key_show_rewards_award_transactions_web_api</description>
		<classname>CRMAPIRewardTransactionBean</classname>
		<method>awardsShow</method>
	</webapi>
	.
	.
	.
</webapis>

...

The following example demonstrates how to make use of the glossary mechanism when defining the printouts of a module. 

Expand
titleModule printouts example

keys used: key_warranty, key_view_the_warranty_policy_printout


Code Block
languagexml
titleModule printout
<printouts>
	<printout>
		<id>WARRANTY_PRINTOUT</id>
		<name>key_warranty</name>
		<description>key_view_the_warranty_policy_printout</description>
		<printoutfilename>InstalledItems/warranty_policy_printout.jrxml</printoutfilename>
		<entityid>INSTALLEDITEMS</entityid>
	</printout>
	.
	.
	.
</printouts>

...

Exceptions

This section shows how to use the Glossary Mechanism when creating exceptions.

The following examples demonstrate how to make use of the glossary mechanism when defining and throw an exception.

 

Expand
titleDefining an exception example

1. Create the exception class.

Code Block
languagejava
titleException class
public class OnlyOneRecordException extends CRMValidationException {
 /**
 * Only one %1 %2 must be specified.
 * 
 * @param crmSession - the session object
 * @param value1 - the exception first value
 * @param value2 - the exception second value 
 * @throws Exception
 */
 	public OnlyOneRecordException(CRMSession crmSession, String value1,String value2) throws Exception {
 
 		super();
 
 		ArrayList<String> parameters = new ArrayList<String>();
 
 		parameters.add(value1);
 		parameters.add(value2);
 
		try 
 		{
 			setMessage(this.getClass().getName().toUpperCase(), crmSession, parameters);
 		} 
 		catch (Exception e) 
 		{
 			e.printStackTrace();
 		}
 	}
}

 

2. Define the exception in the messages.xmlfile. Use a unique key for the expression tag. Keys used: key_com_crm_exception_onlyonerecordexception

Code Block
languagexml
titlemessages.xml
<messages>
	<message>
 		<code>COM.CRM.EXCEPTION.ONLYONERECORDEXCEPTION</code>
 		<expression>key_com_crm_exception_onlyonerecordexception</expression>
 		<description>Only one record must be specified.</description>
 	</message>
	.
	.
	.
</messages>

 

3. Define the exception in the properties file, by using the expression tag key defined in metadata messages file as the entry key, and specifying the exception message.

Code Block
languagexml
titletranslation_eng.properties
<properties>
	<entry key="key_com_crm_exception_onlyonerecordexception">Only one %1 %2 must be specified.</entry>
	.
	.
	.
</properties>
Expand
titleThowing an exception example

A key should be used for every exception input parameter that needs to be translated. Keys used: key_email_type

Code Block
languagejava
titleThrowing Exception
if (emailTypes.contains(emailDto.getType().toString())) 
{
	throw new OnlyOneRecordException(getCRMSession(), "key_email_type",emailDto.getType().getLabel()); 
}

 

Questions

...

This section shows how to use the Glossary Mechanism when creating questions.

 

Expand
titleQuestion example

keys used: key_invoice,key_confirm_financial_transaction_saved_as_posted

question code used: CONFIRM_FINANCIAL_TRANSACTION_SAVED_AS_POSTED


1. Use showConfirmQuestion method to display the confirmation question.

Code Block
languagejava
titleShow question
public CRMDOInvoice postInvoiceButton(CRMDOInvoice invoice)throws Exception{

    	showConfirmQuestion(
    			"CRMUIInvoice", 
    			"postInvoice",
    			"CONFIRM_FINANCIAL_TRANSACTION_SAVED_AS_POSTED",
    			new String[]{"key_invoice"});
    	
    	return invoice;
    }

 

2. Define the question code in metadata messages file.

Code Block
languagexml
titlemessages.xml
<messages>
	<message>
		<code>CONFIRM_FINANCIAL_TRANSACTION_SAVED_AS_POSTED</code>
		<expression>key_confirm_financial_transaction_saved_as_posted</expression>
		<description>Confirm Action</description>
	</message>
</messages>

 

3. Define the question in the properties file, by using the expression tag key defined in metadata messages file as the entry key, and specifying the question message.

Code Block
languagexml
titletranslation_eng.properties
<properties>
	<entry key="key_confirm_financial_transaction_saved_as_posted">%1 is going to be saved as Posted. Do you wish to continue?</entry>
	.
	.
	.
</properties>

 

Image Removed

...

Image Added

Informational Messages

...

This section shows how to use the Glossary Mechanism when creating informational messages.

 

Expand
titleInformational message example

keys used: key_access_token_passcode_reset_success_msg

informatinal message code used: ACCESS_TOKEN_PASSCODE_RESET_SUCCESS_MSG


1. Use showInfoMessage method to display the informational message.

Code Block
languagejava
titleShow informational message
public CRMDOAccessToken resetPassCode(CRMDOAccessToken accessToken) throws Exception {
	...
    	InfoMessage infoMsg	= new InfoMessage(getCRMSession(),
					"ACCESS_TOKEN_PASSCODE_RESET_SUCCESS_MSG",
					new String[]{ accessToken.getAlias("passCodeAfterReset").toString() }, 
					getCRMSession().getRealPath(), 
					getOrganisationID());
			
			showInfoMessage(infoMsg);
	...
}

 

2. Define the question code in metadata messages file.

Code Block
languagexml
titlemessages.xml
<messages>
	<message>
		<code>ACCESS_TOKEN_PASSCODE_RESET_SUCCESS_MSG</code>
		<expression>key_access_token_passcode_reset_success_msg</expression>
		<description>Access token pass code has been reset successfully</description>
	</message>
</messages>

 

3. Define the informational message in the properties file, by using the expression tag key defined in metadata messages file as the entry key, and specifying the message.

Code Block
languagexml
titletranslation_eng.properties
<properties>
	<entry key="key_access_token_passcode_reset_success_msg">The access token pass code has been reset to %1.</entry>
	.
	.
	.
</properties>

 

Image RemovedImage Added

String Concatenation

...

This section shows how to use the Glossary Mechanism when concatenating strings. 

Expand
titleString concatenation example

keys used: key_rule

 

Use getTranslation method to get the translation of the different strings you want to concatenate.

Code Block
languagejava
titleGet translation
public CustomerEventAutomation addPaymentMediumTypeAutomationButton(CRMDOCustomerEventDefinition customerEventDefinition) throws Exception {
		
		PaymentMediumTypeAutomation paymentMediumTypeAutomation = new PaymentMediumTypeAutomation();
		...
		paymentMediumTypeAutomation.setRuleName(getCRMSession().getTranslation("key_rule")+" "+ruleNumber);
		customerEventAutomation.setPaymentMediumTypeAutomation(paymentMediumTypeAutomation);
		
		return customerEventAutomation;
}

 

...

Mandatory Fields

...

This section shows how to use the Glossary Mechanism when defining mandatory while creating business object classes. 

Expand
titleMandatory fields example

keys used: key_website

 

Code Block
languagejava
titleCRMBOWebCustomerEventBean
@Override
protected LinkedHashMap<String, String> getMandatoryFields(CRMDO dto) throws Exception {
   		
	LinkedHashMap<String, String> mandatoryFields = new LinkedHashMap<String, String>();
   		
   	mandatoryFields.putAll(super.getMandatoryFields(dto));
   	mandatoryFields.put("key_website", "website");
   	return mandatoryFields;
}

 Image RemovedImage Added