Versions Compared

Key

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

...

Code Block
languagejava
titlecom.crm.process.paymentgateway.CRMProcessPaymentGatewayBean.java
linenumberstrue
collapsetrue
package payeezy.process.paymentgateway.payeezy;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import org.json.JSONException;
import org.apache.commons.codec.binary.Base64;
import com.crm.businessobject.accounts.CRMBOAccountReceivableBean;
import com.crm.businessobject.billing.CRMBOBillBean;
import com.crm.businessobject.financialtransactions.CRMBOPaymentBean;
import com.crm.businessobject.financialtransactions.CRMBOPaymentCancellationBean;
import com.crm.businessobject.financialtransactions.CRMBOPaymentIntentionBean;
import com.crm.businessobject.paymentgateway.CRMBOPaymentGatewayCardBean;
import com.crm.dataobject.financialtransactions.CRMDOPayment;
import com.crm.dataobject.paymentgateway.CRMDOPaymentGatewayCard;
import com.crm.dataobject.paymentgateway.CRMDOPaymentGatewaySetting;
import com.crm.dataobject.paymentgateway.PaymentGatewayRequestLifeCycleState;
import com.crm.dataobject.platform.CRMDOCurrency;
import com.crm.exception.MandatoryFieldException;
import com.crm.framework.json.JSONArray;
import com.crm.framework.json.JSONObject;
import com.crm.framework.json.JSONUtil;
import com.crm.framework.util.CallList;
import com.crm.framework.util.DateUtil;
import com.crm.framework.util.ExceptionUtil;
import com.crm.process.paymentgateway.CRMProcessPaymentGatewayBean;
import com.crm.process.paymentgateway.CreateAccountParameters;
import com.crm.process.paymentgateway.CreateCardParameters;
import com.crm.process.paymentgateway.CreatePaymentCancellationParameters;
import com.crm.process.paymentgateway.CreatePaymentGatewayAccountResult;
import com.crm.process.paymentgateway.CreatePaymentGatewayCardResult;
import com.crm.process.paymentgateway.CreatePaymentGatewayPaymentCancellationResult;
import com.crm.process.paymentgateway.CreatePaymentGatewayPaymentResult;
import com.crm.process.paymentgateway.CreatePaymentParameters;
import com.crm.process.paymentgateway.DeleteAccountParameters;
import com.crm.process.paymentgateway.DeleteCardParameters;
import com.crm.process.paymentgateway.DeletePaymentGatewayAccountResult;
import com.crm.process.paymentgateway.DeletePaymentGatewayCardResult;
import com.crm.process.paymentgateway.PaymentGatewayCardResult;
import com.crm.process.paymentgateway.PaymentGatewayParameters;
import com.crm.process.paymentgateway.PaymentGatewayResult;
import com.crm.process.paymentgateway.UpdateAccountParameters;
import com.crm.process.paymentgateway.UpdateCardParameters;
import com.crm.process.paymentgateway.UpdatePaymentGatewayAccountResult;
import com.crm.process.paymentgateway.UpdatePaymentGatewayCardResult;
import payeezy.businessobject.paymentgateway.payeezy.PAYEEZYCRMBOPayeezyPaymentGatewaySettingBean;
import payeezy.dataobject.paymentgateway.payeezy.PayeezyMode;
import payeezy.dataobject.paymentgateway.payeezy.PayeezyParameter;
import payeezy.exception.paymentgateway.PaymentGatewayPayeezyException;

@Stateless(mappedName = "ejb/PAYEEZYCRMProcessPayeezyGateway")
@LocalBean
public class PAYEEZYCRMProcessPayeezyGatewayBean extends CRMProcessPaymentGatewayBean {
	private static final long serialVersionUID = 1L;
	private static final String PAYEEZY_PAYMENT_GATEWAY_SUC_LOG_PATH		= "Providers/Payment Gateways/Payeezy_Gateway";
	private static final String PAYEEZY_PAYMENT_GATEWAY_ERROR_LOG_PATH		= "Providers/Payment Gateways/Errors/Payeezy_Gateway";
	private static final String HMAC_SHA256_ALGORITHM 						= "HmacSHA256";
	@EJB private CRMBOPaymentBean paymentBean;
	@EJB private CRMBOPaymentCancellationBean paymentCancellationBean;
	@EJB private CRMBOAccountReceivableBean accountReceivableBean;
	@EJB private CRMBOPaymentIntentionBean paymentIntentionBean;
	@EJB private CRMBOBillBean billBean;
	@EJB private CRMBOPaymentGatewayCardBean paymentGatewayCardBean;
	@EJB private PAYEEZYCRMBOPayeezyPaymentGatewaySettingBean payeezyPaymentGatewaySettingBean;	
	
	protected static Integer timeout = 300 * 1000;

	/**
	 * Default constructor.
	 */
	public PAYEEZYCRMProcessPayeezyGatewayBean() {
		super();
	}
	@Override
	public CreatePaymentGatewayAccountResult processCreateAccount(CreateAccountParameters parameters) throws Exception {
		CreatePaymentGatewayAccountResult result = new CreatePaymentGatewayAccountResult();
		result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.POSTED);
		result.setResponseID(parameters.getAccountNumber());
		return result;
	}
	@Override
	public UpdatePaymentGatewayAccountResult processUpdateAccount(UpdateAccountParameters parameters) throws Exception {
		return null;
	}
	@Override
	public DeletePaymentGatewayAccountResult processDeleteAccount(DeleteAccountParameters parameters) throws Exception {
		return null;
	}
	
	@Override
	public CreatePaymentGatewayCardResult processCreateCard(CreateCardParameters parameters) throws PaymentGatewayPayeezyException, Exception{
		CreatePaymentGatewayCardResult result = new CreatePaymentGatewayCardResult();

		result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.POSTED);
		result.setReferenceNumber(parameters.getToken());
		
		return result;
	}

	@Override
	public UpdatePaymentGatewayCardResult processUpdateCard(UpdateCardParameters parameters) throws Exception {
		return null;
	}
	@Override
	public DeletePaymentGatewayCardResult processDeleteCard(DeleteCardParameters parameters) throws Exception {
		return null;
	}
	
	@Override
	public CreatePaymentGatewayPaymentResult processCreatePayment(CreatePaymentParameters parameters) throws Exception {
		CreatePaymentGatewayPaymentResult result = new CreatePaymentGatewayPaymentResult();
	
		
		String requestStr = null;
		try
		{
			String cardReferenceNumber = parameters.getCardReferenceNumber();
			if(cardReferenceNumber==null)
			{
				throw new MandatoryFieldException(getCRMSession(), "key_card_reference_number");
			}
			CRMDOPaymentGatewayCard paymentGatewayCard = paymentGatewayCardBean.loadByReferenceNumber(cardReferenceNumber, new ArrayList<String>());
			
			String cardHolderName = null;
			String brand = null;
			Integer expirationMonth = null;
			Integer expirationYear = null;
			
			if(paymentGatewayCard!=null)
			{
				cardHolderName = paymentGatewayCard.getHolderName();
				brand = paymentGatewayCard.getBrand();
				expirationMonth = paymentGatewayCard.getExpMonth();
				expirationYear = paymentGatewayCard.getExpYear();
			}
			
			PayeezyConnectionParameters connectionParameters = getConnectionParameters(parameters);
			
			JSONObject request = new JSONObject();
			
			Integer amountInt = parameters.getAmount().multiply(new BigDecimal(100)).intValue();
			String amountStr = amountInt.toString();
			
			ArrayList<String> billNumbers = parameters.getBillNumbers();
			ArrayList<String> invoiceNumbers = parameters.getInvoiceNumbers();
			
			String orderData = "Bills: "+getMetadataList(billNumbers)+" Invoices: "+getMetadataList(invoiceNumbers);
			request.put("method", "token");
			request.put("transaction_type", "purchase");
			request.put("amount", amountStr);
			request.put("order_data ", orderData);
			request.put("currency_code", "USD");			
			request.put("token", getTokenJSON(cardHolderName, cardReferenceNumber, brand, expirationMonth, expirationYear));
			String authorization = getAuthorization(connectionParameters, request.toString());
			String urlStr = connectionParameters.getUrl();
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", connectionParameters.getContentType());
			conn.setRequestProperty("apiKey", connectionParameters.getApiKey());
			conn.setRequestProperty("token", connectionParameters.getMerchantToken());
			conn.setRequestProperty("Authorization", authorization);
			conn.setRequestProperty("nonce", connectionParameters.getNonce());
			conn.setRequestProperty("timestamp", connectionParameters.getTimestamp());
			
			conn.setDoOutput(true);
			requestStr = getRequest(urlStr,request);
			JSONObject responseJSON = getResponse(conn, request, "Create Payment Request: " +requestStr);
			result = (CreatePaymentGatewayPaymentResult) setTransactionInformation(result, responseJSON);
		}
		catch (Exception e)
		{
			CallList.LogTextFile(getCRMSession(), "Create Payment Request: " +requestStr+") Error: "+ExceptionUtil.getStackTrace(e), PAYEEZY_PAYMENT_GATEWAY_ERROR_LOG_PATH,"");
			result.setErrorDescription(e.getMessage());
			result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.REJECTED);
		}
		
		return result;
	}
	@Override
	public CreatePaymentGatewayPaymentCancellationResult processCreatePaymentCancellation(CreatePaymentCancellationParameters parameters) throws Exception {
		CreatePaymentGatewayPaymentCancellationResult result = new CreatePaymentGatewayPaymentCancellationResult();
		
		String requestStr = null;
		try
		{
			
			ArrayList<String> associations =  new ArrayList<String>();
			associations.add("accountReceivable");
			associations.add("paymentGatewayCard");
			associations.add("accountReceivable.currency");
			
			CRMDOPayment payment 							= paymentBean.loadByReferenceNumber(parameters.getPaymentNumber(), associations);
			String paymentPayeezyRefNumber					= payment.getPaymentGatewayRefNumber();
			CRMDOPaymentGatewayCard paymentGatewayCard 		= payment.getPaymentGatewayCard();
			String transactionTag 							= parameters.getPaymentReferenceNumber();
			Integer amountInt 								= payment.getTotalAmount().multiply(new BigDecimal(100)).intValue();
			String amountStr 								= amountInt.toString();
			String currency 								= payment.getAccountReceivable().getCurrency().getCode();
			String cardReferenceNumber 						= paymentGatewayCard.getReferenceNumber();
			String cardHolderName 							= null;
			String brand 									= null;
			Integer expirationMonth							= null;
			Integer expirationYear 							= null;
			
			if(paymentGatewayCard!=null)
			{
				cardHolderName = paymentGatewayCard.getHolderName();
				brand = paymentGatewayCard.getBrand();
				expirationMonth = paymentGatewayCard.getExpMonth();
				expirationYear = paymentGatewayCard.getExpYear();
			}
			
			PayeezyConnectionParameters connectionParameters = getConnectionParameters(parameters);
			
			JSONObject request = new JSONObject();
			request.put("method", "token");
			request.put("transaction_type", "refund");
			request.put("amount", amountStr);
			request.put("transaction_tag ", transactionTag);
			request.put("currency_code", "USD");			
			request.put("token", getTokenJSON(cardHolderName, cardReferenceNumber, brand, expirationMonth, expirationYear));
			String urlStr = connectionParameters.getUrl()+"/"+paymentPayeezyRefNumber;
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setDoOutput(true);
			conn.setRequestMethod("POST");
			conn.setRequestProperty("Content-Type", connectionParameters.getContentType());
			conn.setRequestProperty("apiKey", connectionParameters.getApiKey());
			conn.setRequestProperty("token", connectionParameters.getMerchantToken());
			conn.setRequestProperty("Authorization", getAuthorization(connectionParameters,request.toString()));
			conn.setRequestProperty("nonce", connectionParameters.getNonce());
			conn.setRequestProperty("timestamp", connectionParameters.getTimestamp());
			conn.setDoOutput(true);

			requestStr = getRequest(urlStr,request);
			JSONObject responseJSON = getResponse(conn, request, "Create Payment Cancellation Request: " +requestStr);
			result = (CreatePaymentGatewayPaymentCancellationResult) setTransactionInformation(result, responseJSON);
		}
		catch (Exception e)
		{
			CallList.LogTextFile(getCRMSession(), "Create Payment Cancellation Request: " +requestStr+") Error: "+ExceptionUtil.getStackTrace(e), PAYEEZY_PAYMENT_GATEWAY_ERROR_LOG_PATH,"");
			result.setErrorDescription(e.getMessage());
			result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.REJECTED);
		}
		
		return result;
	}	
	
	private PaymentGatewayCardResult setCardInformation(PaymentGatewayCardResult card, JSONObject responseJSON) throws Exception{
		
		if(responseJSON!=null)
		{
			JSONObject tokenJSON 	= JSONUtil.getJSONObjectParameter(responseJSON, "token", getCRMSession());
			String status 			= JSONUtil.getStringParameter(responseJSON, "status", getCRMSession());
			
			if(status!=null && status.equalsIgnoreCase("success"))
			{
				card.setLifeCycleState(PaymentGatewayRequestLifeCycleState.POSTED);
			}
			else
			{
				card = (PaymentGatewayCardResult) setErrorInformation(card, responseJSON);
				card.setLifeCycleState(PaymentGatewayRequestLifeCycleState.REJECTED);
			}
			
			if(tokenJSON!=null)
			{
				String cardholderName 	= JSONUtil.getStringParameter(tokenJSON, "cardholder_name", getCRMSession());
				String expDate			= JSONUtil.getStringParameter(tokenJSON, "exp_date", getCRMSession());
				String type 			= JSONUtil.getStringParameter(tokenJSON, "type", getCRMSession());
				String token 			= JSONUtil.getStringParameter(tokenJSON, "value", getCRMSession());
				
				card.setHolderName(cardholderName);
				card.setResponseID(token);
				card.setBrand(payeezyPaymentGatewaySettingBean.getCardBrand(type));
				
				if(expDate!=null)
				{
					Integer expMonth = new Integer(expDate.substring(0,2));
					Integer expYear = new Integer(expDate.substring(2,4))+2000;
					
					card.setExpMonth(expMonth);
					card.setExpYear(expYear);
				}
				
			}
		}
		
		return card;
	}
	private PaymentGatewayResult setTransactionInformation(PaymentGatewayResult result, JSONObject responseJSON) throws Exception{
		if(responseJSON!=null)
		{
			
			String transactionStatus 			= JSONUtil.getStringParameter(responseJSON, "transaction_status", getCRMSession());
			String valisationStatus 			= JSONUtil.getStringParameter(responseJSON, "validation_status", getCRMSession());
			if(valisationStatus!=null && 
					valisationStatus.equalsIgnoreCase("success") && 
					transactionStatus!=null && 
					transactionStatus.equalsIgnoreCase("approved"))
			{
				String transactionTag = JSONUtil.getStringParameter(responseJSON, "transaction_tag", getCRMSession());
				result.setResponseID(transactionTag);
				result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.POSTED);
			}
			else
			{
				result = (CreatePaymentGatewayPaymentResult) setErrorInformation(result, responseJSON);
				result.setLifeCycleState(PaymentGatewayRequestLifeCycleState.REJECTED);
			}
		}
		return result;
	}
	private PaymentGatewayResult setErrorInformation(PaymentGatewayResult result, JSONObject responseJSON) throws Exception{
		String errorCode = "";
		String errorDescription = "";
		
		if(responseJSON!=null)
		{
			JSONObject errorJSON 	= JSONUtil.getJSONObjectParameter(responseJSON, "error", getCRMSession());
			
			if(errorJSON!=null)
			{
				JSONArray messagesJSON = JSONUtil.getJSONArrayParameter(errorJSON, "messages", getCRMSession());
				
				if(messagesJSON!=null)
				{
					for(int i=0;i<messagesJSON.size();i++)
					{
						JSONObject messageJSON = (JSONObject) messagesJSON.get(i);
						if(messageJSON!=null)
						{
							errorCode += JSONUtil.getStringParameter(messageJSON, "code", getCRMSession())+", ";
							errorDescription += JSONUtil.getStringParameter(messageJSON, "description", getCRMSession())+", ";
						}
					}
				}
			}
		}
		
		if(errorCode!=null && !errorCode.isEmpty())
		{
			errorCode = errorCode.substring(0, errorCode.length()-2);
			if(errorCode.length()>32)
			{
				errorCode = errorCode.substring(0, 31);
			}
			
			result.setErrorCode(errorCode);
		}
		
		if(errorDescription!=null && !errorDescription.isEmpty())
		{
			errorDescription = errorDescription.substring(0, errorDescription.length()-2);
			
			result.setErrorDescription(errorDescription);
		}
		return result;
	}
	
	private String getRequest(String url, JSONObject originalRequestJSON) throws Exception{
		
		JSONObject requestJSON = new JSONObject(originalRequestJSON, JSONObject.getNames(originalRequestJSON));
		String request="";
		
		if(url!=null)
		{
			request = "URL:" +url;
		}
		
		if(requestJSON!=null)
		{
			JSONObject creditCardJSON = JSONUtil.getJSONObjectParameter(requestJSON, "credit_card", getCRMSession());
			
			if(creditCardJSON!=null)
			{
				creditCardJSON.remove("cvv");
				String cardNumber 		= JSONUtil.getStringParameter(requestJSON, "card_number", getCRMSession());
				
				if(cardNumber!=null)
				{
					cardNumber = "************"+cardNumber.substring(cardNumber.length()-4,cardNumber.length());
					creditCardJSON.remove("card_number");
				}
				
				creditCardJSON.put("card_number", cardNumber);
			}
			
			request+= ", Request: "+requestJSON.toString();
		}
		
		
		
		return request;
	}
	
	private String getMetadataList(ArrayList<String> list){
		String s = "";
		if(list!=null)
		{
			for(String o:list)
			{
				s += ""+o+",";
			}
			if(s.length()>0)
			{
				s = s.substring(0, s.length()-1);
			}
		}
		return s;
	}
	@Override
	public Boolean isCurrencySupported(CRMDOCurrency currency, CRMDOPaymentGatewaySetting paymentGatewaySetting) throws Exception {
		return payeezyPaymentGatewaySettingBean.isCurrencySupported(currency,paymentGatewaySetting);
	}
	
	private PayeezyConnectionParameters getConnectionParameters(PaymentGatewayParameters parameters) throws NoSuchAlgorithmException{
		PayeezyConnectionParameters connectionParameters = new PayeezyConnectionParameters();
		
		String mode 			= (String) parameters.getGeneralparameter(PayeezyParameter.MODE.toString());
		String apiKey 			= null;
		String merchantToken 	= null;
		String apiSecret 		= null;
		String jsSecurityKey 	= null;
		String transarmorToken 	= null;
		String url				= null;
		String nonce = Long.toString(Math.abs(SecureRandom.getInstance("SHA1PRNG").nextLong()));
		String timestamp =  Long.toString(Instant.now().toEpochMilli());
		
		if(mode!=null && mode.equals(PayeezyMode.TEST.toString()))
		{
			apiKey 			= (String) parameters.getGeneralparameter(PayeezyParameter.TEST_API_KEY.toString());
			merchantToken 	= (String) parameters.getGeneralparameter(PayeezyParameter.TEST_MERCHANT_TOKEN.toString());
			apiSecret 		= (String) parameters.getGeneralparameter(PayeezyParameter.TEST_API_SECRET.toString());
			jsSecurityKey 	= (String) parameters.getGeneralparameter(PayeezyParameter.TEST_JS_SECURITY_KEY.toString());
			transarmorToken = (String) parameters.getGeneralparameter(PayeezyParameter.TEST_TA_TOKEN.toString());
			url				= (String) parameters.getGeneralparameter(PayeezyParameter.TEST_URL.toString());
		}
		else if(mode!=null && mode.equals(PayeezyMode.LIVE.toString()))
		{
			apiKey 			= (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_API_KEY.toString());
			merchantToken 	= (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_MERCHANT_TOKEN.toString());
			apiSecret 		= (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_API_SECRET.toString());
			jsSecurityKey 	= (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_JS_SECURITY_KEY.toString());
			transarmorToken = (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_TA_TOKEN.toString());
			url				= (String) parameters.getGeneralparameter(PayeezyParameter.LIVE_URL.toString());
		}
		
		if(url!=null)
		{
			if(parameters instanceof CreateCardParameters)
			{
				url += "transactions/tokens";
			}
			else if(parameters instanceof CreatePaymentParameters)
			{
				url += "transactions";
			}
			else if(parameters instanceof CreatePaymentCancellationParameters)
			{
				url += "transactions";
			}
		}
		
		connectionParameters.setApiKey(apiKey);
		connectionParameters.setMerchantToken(merchantToken);
		connectionParameters.setUrl(url);
		connectionParameters.setApiSecret(apiSecret);
		connectionParameters.setJsSecurityKey(jsSecurityKey);
		connectionParameters.setContentType("application/json");
		connectionParameters.setTransarmorToken(transarmorToken);
		connectionParameters.setNonce(nonce);
		connectionParameters.setTimestamp(timestamp);
		
		return connectionParameters;
		
	}
	
	public JSONObject getCreditCardJSON(String cardHolderName, String cardNumber, String cardBrand, Integer expMonth, Integer expYear, String cvv) throws Exception {
		JSONObject creditCardJSON=new JSONObject();
		Integer expDate = null;
		
		if(expMonth!=null && expYear!=null)
		{
			expDate = expMonth*100+expYear % 1000;
		}
		
		creditCardJSON.put("type", payeezyPaymentGatewaySettingBean.getCardType(cardBrand));
		creditCardJSON.put("cardholder_name", cardHolderName);
		creditCardJSON.put("card_number", cardNumber);
		creditCardJSON.put("exp_date", expDate);
		creditCardJSON.put("cvv", cvv);
		
		return creditCardJSON;
	}
	public JSONObject getTokenJSON(String cardHolderName, String cardReferenceNumber, String cardBrand, Integer expMonth, Integer expYear) throws Exception {
		JSONObject tokenJSON=new JSONObject();
		tokenJSON.put("token_type", "FDToken");
		JSONObject tokenDataJSON=new JSONObject();
		Integer expDate = null;
		if(expMonth!=null && expYear!=null)
		{
			expDate = expMonth*100+expYear % 1000;
		}
		tokenDataJSON.put("type", payeezyPaymentGatewaySettingBean.getCardType(cardBrand));
		tokenDataJSON.put("cardholder_name", cardHolderName);
		tokenDataJSON.put("value", cardReferenceNumber);
		tokenDataJSON.put("exp_date", expDate);
		tokenJSON.put("token_data", tokenDataJSON);
		return tokenJSON;
	}
	private String getAuthorization(PayeezyConnectionParameters connectionParameters, String request) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException, Exception{		
		
		Mac mac=Mac.getInstance(HMAC_SHA256_ALGORITHM);
		String apiSecret=connectionParameters.getApiSecret();
		SecretKeySpec secret_key = new SecretKeySpec(apiSecret.getBytes(), HMAC_SHA256_ALGORITHM);
		mac.init(secret_key);
		String apikey = connectionParameters.getApiKey();
		String nonce = connectionParameters.getNonce();
		String timeStamp = connectionParameters.getTimestamp();
		String token = connectionParameters.getMerchantToken();
		String payload = request;
		StringBuilder buff=new StringBuilder();
		buff.append(apikey)
		.append(nonce)
		.append(timeStamp);
		if(token!=null){
			buff.append(token);
		}
		if(payload != null){
			buff.append(payload);
		}
		String bufferData = buff.toString();
		//MessageLogger.logMessage(String.format(bufferData));
		byte[] macHash=mac.doFinal(bufferData.getBytes("UTF-8"));
		//MessageLogger.logMessage(Integer.toString(macHash.length));
		//MessageLogger.logMessage(String.format("MacHAsh:{}" , macHash));
		String authorizeString = new String(Base64.encodeBase64(toHex(macHash)));
		//   MessageLogger.logMessage(String.format("Authorize:{}" , authorizeString));

		return authorizeString;
	}
	
	   /**
     * Converts the bytes to Hex bytes
     * @param arr
     * @return
     */
    private byte[] toHex(byte[] arr) {
        String hex= byteArrayToHex(arr);
        return hex.getBytes();
    }
    private String byteArrayToHex(byte[] a) {
        StringBuilder sb = new StringBuilder(a.length * 2);
        for(byte b: a)
            sb.append(String.format("%02x", b & 0xff));
        return sb.toString();
    }
	
	
	@SuppressWarnings("deprecation")
	private JSONObject getResponse(HttpURLConnection conn, JSONObject request, String requestInfo) throws Exception{
		JSONObject responseJSON = null;
		
		CallList.LogTextFile(getCRMSession(), requestInfo, PAYEEZY_PAYMENT_GATEWAY_SUC_LOG_PATH,"");
		
		OutputStream os = conn.getOutputStream();
		os.write(request.toString().getBytes());
		os.flush();
		if (conn.getResponseCode() != HttpURLConnection.HTTP_OK && 
				conn.getResponseCode() != HttpURLConnection.HTTP_CREATED && 
				conn.getResponseCode() != HttpURLConnection.HTTP_ACCEPTED) 
		{
			String errorDescription = "";
			if(conn.getErrorStream()!=null)
			{
				BufferedReader br = new BufferedReader(new InputStreamReader((conn.getErrorStream())));
				if(br!=null)
				{
					errorDescription = br.readLine();
				}
			}
			CallList.LogTextFile(getCRMSession(),requestInfo+"\nError: HTTP error code : "+ conn.getResponseCode()+"\nError Description: "+errorDescription,PAYEEZY_PAYMENT_GATEWAY_ERROR_LOG_PATH,"");
			throw new RuntimeException("Failed : HTTP error code : "+ conn.getResponseCode()+" error description: "+errorDescription);
		}

		BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
		String output;
		Date date = DateUtil.getCurrentDate();
		long startTime = date.getTime();
		long duration = 0;
		while( true )
		{
			duration =DateUtil.getCurrentDate().getTime() - startTime;
			if(duration>timeout)
			{
				throw new Exception("Time out");
			}
			if ((output = br.readLine()) != null) 
			{
				try
				{
					CallList.LogTextFile(getCRMSession(),requestInfo+"\nResponse: "+output,PAYEEZY_PAYMENT_GATEWAY_SUC_LOG_PATH,"");
					break;
				}
				catch (JSONException ex)
				{
				}
			}
			else{
				try {
					Thread.sleep(50);
				} catch (Exception e) {
				}
			}
		}
		conn.disconnect();
		responseJSON = new JSONObject(output);
		
		
		return responseJSON;
	}
}

6. Summary

...

Page

You will need to create one main summary page for provisioning requests, and two that will be used by the main as drill-downs: one for provisioning request parameters and one for provisioning request process informationpayment gateway requests.

For more information on creating custom summary pages go to Customize Summary Pages.

a. Provisioning Requests

...

titleProvisioning Requests

...

.

...

Code Block
languagexml
titlerequests.xml
linenumberstrue
collapsetrue
<summary>
<?xml version="1.0" encoding="UTF-8"?><summary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../xsd/summary.xsd">
	<title>key_
provider
payment_gateway_requests</title>
	<sql>FROM 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS 
		LEFT JOIN USERS CREATEDBY ON CREATEDBY.USERID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
PROVREQCREATEDBYUSERID
PAYGATEWAYREQCREATEDBYUSERID
		LEFT JOIN USERS UPDATEDBY ON UPDATEDBY.USERID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
PROVREQUPDATEDBYUSERID
PAYGATEWAYREQUPDATEDBYUSERID
		LEFT JOIN OUUNITS CREATEDBYUNIT ON CREATEDBYUNIT.OUUID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
PROVREQCREATEDBYOUUID
PAYGATEWAYREQCREATEDBYOUUID
		LEFT JOIN OUUNITS UPDATEDBYUNIT ON UPDATEDBYUNIT.OUUID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
PROVREQUPDATEDBYOUUID
PAYGATEWAYREQUPDATEDBYOUUID
		LEFT JOIN 
PROVPROVIDERS
PAYMENTGATEWAYSETTINGS ON 
PROVPROVIDERS
PAYMENTGATEWAYSETTINGS.
PROVPROVIDERID
PAYGATEWAYSETID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
PROVPROVIDERID
PAYGATEWAYSETID
		LEFT JOIN 
SUBSCRIPTIONS
PAYMENTGATEWAYCUSTOMERACCOUNT ON 
SUBSCRIPTIONS
PAYMENTGATEWAYCUSTOMERACCOUNT.
SUBID
PAYGATECUSACCID = 
PROVISIONINGREQUESTS
PAYMENTGATEWAYREQUESTS.
SUBID
PAYGATECUSACCID
		
WHERE PROVISIONINGREQUESTS.PROVREQDELETED = 0 AND PROVPROVIDERS.PROVPROVIDERPROTOCOL = 'TUCANO' </sql> <rowsperpage>20</rowsperpage> <primaryfield>PROVISIONINGREQUESTS.PROVREQID</primaryfield> <mainlinkfield>PROVREQNUM</mainlinkfield> <orderbyfields>PROVISIONINGREQUESTS.PROVREQCREATEDDATE DESC</orderbyfields> <multiselect>true</multiselect> <module>CUSTOM_TUCANO</module> <fieldlist> <!-- external filters --> <field> <fieldname>PROVPROVIDERS.PROVPROVIDERID</fieldname> <filtertextoption>equal</filtertextoption> </field> <field> <fieldname>PROVISIONINGREQUESTS.PROVREQID</fieldname> <filtertextoption>equal</filtertextoption> </field> <!-- basic search --> <field> <fieldname>PROVISIONINGREQUESTS.PROVREQNUM</fieldname> <caption>key_number</caption> <filter>true</filter> </field> <field> <fieldname>TYPE_FILTER</fieldname> <fieldfunction>PROVISIONINGREQUESTS.PROVREQTYPECODE</fieldfunction> <caption>key_type</caption> <filter>true</filter> <fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getTypeOptions:key_all</fixedlookup> </field> <field> <fieldname>LIFECYCLESTATE_FILTER</fieldname> <fieldfunction>PROVISIONINGREQUESTS.LIFECYCLESTATE</fieldfunction> <caption>key_life_cycle_state</caption> <filter>true</filter> <fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getLifeCycleStateOptions:key_all</fixedlookup>
LEFT JOIN ACCOUNTSRECEIVABLE ON PAYMENTGATEWAYCUSTOMERACCOUNT.ACCRECID = ACCOUNTSRECEIVABLE.ACCRECID
		LEFT JOIN PAYMENTGATEWAYCARDS ON PAYMENTGATEWAYCARDS.PAYGATEWAYCARDID = PAYMENTGATEWAYREQUESTS.PAYGATEWAYCARDID
		LEFT JOIN ACCPAYMENTPREFERENCES ON ACCPAYMENTPREFERENCES.ACCPAYPREFID = PAYMENTGATEWAYCARDS.ACCPAYPREFID
		LEFT JOIN PAYMENTPREFERENCES ON PAYMENTPREFERENCES.PAYPREFID = ACCPAYMENTPREFERENCES.PAYPREFID
		LEFT JOIN PAYMENTS ON PAYMENTS.PAYMENTID = PAYMENTGATEWAYREQUESTS.PAYMENTID
		LEFT JOIN PAYMENTCANCELLATIONS ON PAYMENTCANCELLATIONS.PAYMENTCANCELID = PAYMENTGATEWAYREQUESTS.PAYMENTCANCELID	
		LEFT JOIN BILLS ON BILLS.BILLID = PAYMENTGATEWAYREQUESTS.BILLID
		LEFT JOIN WALLETS ON WALLETS.WALLETID = PAYMENTGATEWAYREQUESTS.WALLETID
		LEFT JOIN SUBSCRIPTIONS ON SUBSCRIPTIONS.SUBID=PAYMENTGATEWAYREQUESTS.SUBID
		LEFT JOIN PROCESSRUNLOG ON PROCESSRUNLOG.PROCESSRUNLOGID = PAYMENTGATEWAYREQUESTS.PROCESSID
		WHERE PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQDELETED = 0 AND PAYMENTGATEWAYSETTINGS.PAYMENTGATEWAYPROTOCOL='PAYEEZY'
	</sql>
	<rowsperpage>20</rowsperpage>
	<primaryfield>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQID</primaryfield>
	<mainlinkfield>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQNUM</mainlinkfield>
	<orderbyfields>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQCREATEDDATE DESC</orderbyfields>
	<multiselect>false</multiselect>
	<entityfilter></entityfilter>
	<module>CUSTOM_PAYEEZY</module>
	
	<fieldlist>
		<!-- external filters -->
		<field>
			<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQID</fieldname>
			<filtertextoption>equal</filtertextoption>
		</field>
		<field>
			
<fieldname>PRIORITY_FILTER<
<fieldname>PAYMENTGATEWAYREQUESTS.PAYMENTID</fieldname>
		</field>
		<field>
	
<fieldfunction>PROVISIONINGREQUESTS
		<fieldname>PAYMENTGATEWAYREQUESTS.
PROVREQPRIORITY<
PAYMENTCANCELID</
fieldfunction>
fieldname>
		
<caption>key_priority</caption>
</field>
		
<filter>true</filter>
<field>
			
<fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getPriorityOptions:key_all</fixedlookup>
<fieldname>PAYMENTGATEWAYREQUESTS.BILLID</fieldname>
		</field>
		
<field>
			
<fieldname>SUBSCRIPTIONS
<fieldname>PAYMENTGATEWAYREQUESTS.
SUBID<
WALLETID</fieldname>
		
<caption>key_subscription</caption>
</field>
		
<filter>true</filter>
<field>
			
<fieldtype>string</fieldtype> <filterlookupname>dataset;subscriptions.load;subid;subnum</filterlookupname>
<fieldname>PAYMENTGATEWAYREQUESTS.SUBID</fieldname>
		</field>
		<field>
			
<fieldname>PROVISIONINGREQUESTS
<fieldname>ACCOUNTSRECEIVABLE.
PROVREQSCHEDULEDDATE<
ACCRECID</fieldname>
		
<caption>key_scheduled_date</caption> <filter>true</filter>
</field>
                <field>
			
<fieldtype>date<
<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATECUSACCID</
fieldtype>
fieldname>
			
<filtertextoption>range<
<filtertextoption>equal</filtertextoption>
		</field>
		
<field> <fieldname>PROVISIONINGREQUESTS.PROVREQEXECUTIONDATE</fieldname> <caption>key_executed_date</caption> <filter>true</filter>
<!-- fields -->
		<field>
			
<fieldtype>date<
<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQNUM</
fieldtype>
fieldname>
			
<filtertextoption>range</filtertextoption> </field> <field> <fieldname>PROCESSNAME_FILTER</fieldname>
<caption>key_number</caption>
			
<fieldfunction>PROVISIONINGREQUESTS.PROCESSNAME<
<summary>true</
fieldfunction>
summary>
			
<caption>key_process_name</caption>
<available>true</available>
			<filter>true</filter>
			
<filtertextoption>equal</filtertextoption> <fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getProvRequestProcessNameOptions:key_all</fixedlookup>
<filteravailable>true</filteravailable>
		</field>
		
<field>

		
<fieldname>PROCESSID_FILTER</fieldname>
<field>
			
<fieldfunction>PROVISIONINGREQUESTS
<fieldname>PAYMENTGATEWAYSETTINGS.
PROCESSID<
PAYGATEWAYSETNAME</
fieldfunction>
fieldname>
			<caption>key_payment_
process
gateway_
run<
provider</caption>
			
<filter>true<
<summary>true</
filter>
summary>
		
<filtertextoption>equal</filtertextoption> <filterlookupname>dataset;processrun.tucano.load;PROCESSRUNLOGID;PROCESSRUNLOGNUM:PROCESSID:PROCESSRUNLOGSTATUS:PROCESSRUNLOGSTARTDATE:PROCESSRUNLOGENDDATE</filterlookupname>
</field>		
		
</field>

		<field>
			
<fieldname>STB_FILTER<
<fieldname>TYPE</fieldname>
			
<fieldfunction>PROVISIONINGREQUESTS.PROVREQID</fieldfunction>
<fieldfunction>
			
<caption>key_installed_item</caption> <filter>true</filter> <fieldtype>string</fieldtype>
CASE 
				
<filtercondition>
WHEN 
PROVISIONINGREQUESTS.PROVREQID IN ( SELECT PROVREQUESTPARAMETERS.PROVREQID FROM PROVREQUESTPARAMETERS
PAYMENTGATEWAYREQUESTS.PAYMENTID IS NOT NULL THEN 'Payment'
				
INNER
WHEN 
JOIN
PAYMENTGATEWAYREQUESTS.PAYMENTCANCELID 
INSTALLEDITEMS
IS 
ON
NOT 
PROVREQPARAMNAME
NULL 
IN ( 'SERVICE_CA_ID', 'STB_CA_ID' )
THEN 'Payment Cancellation' 
				
AND
WHEN 
INSTALLEDITEMS
PAYMENTGATEWAYREQUESTS.
INSTITEMALTCODE
REFUNDID 
=
IS 
PROVREQUESTPARAMETERS.PROVREQPARAMCHARVALUE WHERE INSTALLEDITEMS.INSTITEMID IN ('#1')
NOT NULL THEN 'Refund' 
				
AND
WHEN 
PROVREQUESTPARAMETERS.PROVREQPARAMDELETED = 0
PAYMENTGATEWAYREQUESTS.PAYGATEWAYCARDID IS NOT NULL THEN 'Card'
			
) </filtercondition> <filterlookupname>dataset;inventory.loadinstalleditem;institemid;institemserialnum</filterlookupname> </field> <!-- advanced search --> <field> <fieldname>PROVISIONINGREQUESTS.PROVREQERRORCODE</fieldname>
	WHEN PAYMENTGATEWAYREQUESTS.PAYGATECUSACCID IS NOT NULL THEN 'Account'
			END
			</fieldfunction>
			<caption>key_
error_code<
type</caption>
			<filter>true</filter>
			
<filteronexpand>true<
<summary>true</
filteronexpand>
summary>
		
</field> <field> <fieldname>PROVISIONINGREQUESTS.PROVREQERRORDESC</fieldname> <caption>key_error_description</caption> <filter>true</filter> <filteronexpand>true</filteronexpand> </field>
	<fixedlookup>|key_all|Payment|key_payment|Payment Cancellation|key_payment_cancellation|Refund|key_refund|Account|key_account|Card|key_card</fixedlookup>	
		</field>
		
		<field>
			
<fieldname>CREATEDBYUSER_FILTER<
<fieldname>PROCESSRUNDEFINITION</fieldname>
			
<fieldfunction>CREATEDBY
<fieldfunction>PROCESSRUNLOG.
USERID<
PROCESSRUNLOGNUM</fieldfunction>
			<caption>key_
created
payment_
by
gateway_
user<
run</caption>
			
<filter>true<
<summary>true</
filter>
summary>
		
<filteronexpand>true<
</
filteronexpand>
field>
		
<filterlookupname>dataset;users.load;userid;username:name</filterlookupname> </field> <field> <fieldname>CREATEDBYUNIT_FILTER</fieldname> <fieldfunction>CREATEDBYUNIT.OUUID<
<field>
			<fieldname>PAYMENTNUMBER</fieldname>
			<fieldfunction> 
				case when PAYMENTGATEWAYREQUESTS.LIFECYCLESTATE = 'POSTED' then PAYMENTS.PAYMENTNUM else PAYMENTS.PAYMENTREFNUM end
			</fieldfunction>
			<caption>key_
created_by_unit<
payment</caption>
			
<filter>true</filter> <filteronexpand>true</filteronexpand> <filterlookupname>dataset;networkmanagement.loadunits;ouuid;ouuname:ougname:oucname</filterlookupname>
<summary>true</summary>
            <link>javascript:displayModalCreate('financialtransactions/payment','ejb/CRMUIPayment','loadForm','java.lang.String@((PAYMENTGATEWAYREQUESTS.PAYMENTID))','',null,'','')</link>
		</field>
		
		<field>
			
<fieldname>PROVREQCREATEDDATE_FILTER<
<fieldname>PAYMENTCANCELNUMBER</fieldname>
			
<fieldfunction>PROVISIONINGREQUESTS.PROVREQCREATEDDATE</fieldfunction>
<fieldfunction> 
				
<fieldtype>date</fieldtype>
CASE 
			
<caption>key_date_created</caption>
		WHEN PAYMENTCANCELLATIONS.LIFECYCLESTATE = 'POSTED' 
			
<filter>true</filter>
		
<filteronexpand>true</filteronexpand>
then PAYMENTCANCELLATIONS.PAYMENTCANCELNUM
				
<filtertextoption>range</filtertextoption>

		
</field>
		
<field>
ELSE PAYMENTCANCELLATIONS.PAYMENTCANCELREFNUM
			
<fieldname>UPDATEDBYUSER_FILTER</fieldname>
	END
			
<fieldfunction>UPDATEDBY.USERID<
</fieldfunction>
			<caption>key_
updated
payment_
by_user<
cancellation</caption>
			
<filter>true<
<summary>true</
filter> <filteronexpand>true</filteronexpand> <filterlookupname>dataset;users.load;userid;username:name</filterlookupname>
summary>
            <link>javascript:displayModalCreate('financialtransactions/paymentCancellation','ejb/CRMUIPaymentCancellation','loadForm','java.lang.String@((PAYMENTGATEWAYREQUESTS.PAYMENTCANCELID))','',null,'','')</link>
		</field>
		
<field>

		
<fieldname>UPDATEDBYUNIT_FILTER</fieldname>
<field>
			
<fieldfunction>UPDATEDBYUNIT
<fieldname>PAYMENTGATEWAYREQUESTS.
OUUID<
PAYGATEWAYREQREFNUM</
fieldfunction>
fieldname>
			<caption>key_
updated
payment_gateway_
by
reference_
unit<
number</caption>
			
<filter>true<
<summary>true</
filter>
summary>
		
<filteronexpand>true<
</
filteronexpand>
field>
		
<filterlookupname>dataset;networkmanagement.loadunits;ouuid;ouuname:ougname:oucname</filterlookupname>

		
</field>
<field>
			
<fieldname>PROVREQUPDATEDDATE
<fieldname>PAYMENT_FILTER</fieldname>
			
<fieldfunction>PROVISIONINGREQUESTS
<fieldfunction>PAYMENTS.
PROVREQUPDATEDDATE<
PAYMENTID</fieldfunction>
<fieldtype>date</fieldtype>

			<caption>key_
date_updated<
payment</caption>
			<filter>true</filter>
			
<filteronexpand>true</filteronexpand> <filtertextoption>range</filtertextoption>
<filterlookupname>dataset;financialtransactions.loadpayments;paymentid;paymentrefnum</filterlookupname>
		</field>
		
<!-- fields -->

		<field>
			
<fieldname>PROVISIONINGREQUESTS.PROVREQNUM<
<fieldname>PAYMENT_CANCELLATION_FILTER</fieldname>
			
<caption>key_number</caption>
<fieldfunction>PAYMENTCANCELLATIONS.PAYMENTCANCELID</fieldfunction>
			
<summary>true</summary>
<caption>key_payment_cancellation</caption>
			<filter>true</filter>
			<filterlookupname>dataset;financialtransactions.loadpaymentcancellations;paymentcancelid;paymentcancelrefnum</filterlookupname>
		</field>
		
		<field>
			
<fieldname>TYPE<
<fieldname>CARD_FILTER</fieldname>
			
<fieldfunction>PROVISIONINGREQUESTS
<fieldfunction>PAYMENTGATEWAYCARDS.
PROVREQTYPECODE<
PAYGATEWAYCARDID</fieldfunction>
			<caption>key_
type<
payment_gateway_card</caption>
			
<summary>true<
<filter>true</
summary>
filter>
			
<fixedlookup>ejb/CRMUITucanoServiceProvisioningRequest.getTypeOptions:key_n/a</fixedlookup>
<filterlookupname>dataset;paymentgateway.loadcards;paygatewaycardid;PAYGATEWAYCARDHOLDERNAME</filterlookupname>
		</field>
		
<field>

		
<fieldname>LIFECYCLESTATE</fieldname>
<field>
			
<fieldfunction>PROVISIONINGREQUESTS
<fieldname>ACCOUNTSRECEIVABLE.
LIFECYCLESTATE<
ACCRECID</
fieldfunction>
fieldname>
			<caption>key_
life
account_
cycle_state<
name</caption>
			
<summary>true</summary>
<filter>true</filter>
			<filteravailable>true</filteravailable>
			
<fixedlookup>ejb/CRMUITucanoServiceProvisioningRequest.getLifeCycleStateOptions:key_n/a</fixedlookup>
<fieldtype>string</fieldtype>
			<filterlookupname>dataset;accounts.load;accrecid;accrecname</filterlookupname>
		</field> 
		
		<field>
			
<fieldname>SCHEDULEDDATE<
<fieldname>SUBSCRIPTION_FILTER</fieldname>
			
<fieldfunction>PROVISIONINGREQUESTS
<fieldfunction>SUBSCRIPTIONS.
PROVREQSCHEDULEDDATE<
SUBID</fieldfunction>
			<caption>key_
scheduled_date<
subscription</caption>
			<filter>true</filter>
			
<summary>true</summary>
<filterlookupname>dataset;subscriptions.load;subid;subnum</filterlookupname>
		</field>
		<field>
			
<fieldname>EXECUTIONDATE<
<fieldname>ACCOUNTSRECEIVABLE.ACCRECNUM</fieldname>
<fieldfunction>PROVISIONINGREQUESTS.PROVREQEXECUTIONDATE</fieldfunction>

			<caption>key_
executed
account_
date<
number</caption>
<summary>true</summary>
            <mouseover>true</mouseover>  
			<summary>true</summary>
			<link>javascript:displayModalCreate('accounts/accountReceivable','ejb/CRMUIAccountReceivable','loadForm','java.lang.String@((ACCOUNTSRECEIVABLE.ACCRECID))','',null,'','')</link>
		</field>	
		
		<field>
			
<fieldname>SUBSCRIPTIONS
<fieldname>PAYMENTPREFERENCES.
SUBNUM<
PAYPREFNAME</fieldname>
			<caption>key
_subscription<
_accounts_receivable_payment_preference</caption>
            <mouseover>true</mouseover>  
			<summary>true</summary>
		</field>		
		
<field>

		
<fieldname>CREATEDBYUSERNAME</fieldname>
<field>
			
<fieldfunction>CREATEDBY
<fieldname>PAYMENTGATEWAYCARDS.
USERNAME<
PAYGATEWAYCARDHOLDERNAME</
fieldfunction>
fieldname>
			<caption>key_
created
payment_
by
gateway_
user<
card</caption>
			
<expand>true</expand>
<mouseover>true</mouseover>  
			<summary>true</summary>
		</field>
		
<field>

		
<fieldname>UPDATEDBYUSERNAME</fieldname>
<field>
			
<fieldfunction>UPDATEDBY
<fieldname>PAYMENTGATEWAYCUSTOMERACCOUNT.
USERNAME<
PAYGATECUSACCNUM</
fieldfunction>
fieldname>
			<caption>key_
updated
payment_gateway_
by
customer_
user<
account</caption>
			
<expand>true</expand>
<mouseover>true</mouseover>  
			<summary>true</summary>
		</field>
		
		<field>
			
<fieldname>CREATEDBYUNITOUUNAME<
<fieldname>BILLS.BILLNUM</fieldname>
			
<fieldfunction>CREATEDBYUNIT.OUUNAME</fieldfunction> <caption>key_created_by_unit<
<caption>key_paid_bill</caption>
			
<expand>true<
<summary>true</
expand>
summary>
		
<
 	<available>true</
field>
available>
		
<field> <fieldname>UPDATEDBYUNITOUUNAME</fieldname> <fieldfunction>UPDATEDBYUNIT.OUUNAME</fieldfunction> <caption>key_updated_by_unit</caption> <expand>true</expand> </field> <field> <fieldname>PROVISIONINGREQUESTS.PROVREQCREATEDDATE<
    <link>javascript:displayModalCreate('billing/bill','ejb/CRMUIBill','loadForm','java.lang.String@((PAYMENTGATEWAYREQUESTS.BILLID))','',null,'','')</link>
		</field>
		
		<field>
			<fieldname>BILL_FILTER</fieldname>
			
<fieldtype>date<
<fieldfunction>BILLS.BILLID</
fieldtype>
fieldfunction>
			<caption>key_
date
paid_
created<
bill</caption>
		
<expand>true</expand>
	<filter>true</filter>
			<filterlookupname>dataset;billing.load;billid;billnum</filterlookupname>
		</field>
		
		<field>
			
<fieldname>PROVISIONINGREQUESTS
<fieldname>WALLETS.
PROVREQUPDATEDDATE<
WALLETNUM</fieldname>
<fieldtype>date</fieldtype>

			<caption>key_topped_
date
up_
updated<
wallet</caption>
			
<expand>true<
<summary>true</
expand>
summary>
		 	
<
<available>true</
field>
available>
		
<field> <fieldname>PROVISIONINGREQUESTS.PROVREQREQUEST</fieldname> <caption>key_request</caption> <expand>true</expand> </field>
    <link>javascript:displayModalCreate('wallets/wallet','ejb/CRMUIWallet','loadForm','java.lang.String@((PAYMENTGATEWAYREQUESTS.WALLETID))','',null,'','')</link>
		</field>
		
		<field>
			
<fieldname>PROVISIONINGREQUESTS
<fieldname>SUBSCRIPTIONS.
PROVREQRESPONSE<
SUBNUM</fieldname>
			<caption>key_
response<
subscription</caption>
			<summary>true</summary>
		 	
<expand>true<
<available>true</
expand>
available>
		
</field>
    <link>javascript:displayModalCreate('subscriptions/subscription','ejb/CRMUISubscription','loadForm','java.lang.String@((PAYMENTGATEWAYREQUESTS.SUBID))','',null,'','')</link>
		<
!-- drilldowns -->
/field>
		
		<field>
			
<fieldname>PARAMETERS
<fieldname>WALLETNUM_
DD<
FILTER</fieldname>
			
<fieldfunction>''<
<fieldfunction>WALLETS.WALLETID</fieldfunction>
			<caption>key_
parameters<
wallet</caption>
			
<summary>true<
<filter>true</
summary>
filter>
			
<fieldtype>label</fieldtype> <label>key_parameters</label> <link>drilldown:provisioning/tucano/request_parameters;hidefilters~true~PROVREQUESTPARAMETERS.PROVREQID~((PROVISIONINGREQUESTS.PROVREQID))</link> </field>
<filterlookupname>dataset;wallets.load;walletid;walletnum</filterlookupname>
		</field>
		
		<field>
			
<fieldname>PROCESSINFORMATION
<fieldname>PROCESSID_
DD<
FILTER</fieldname>
			
<fieldfunction>''<
<fieldfunction>PAYMENTGATEWAYREQUESTS.PROCESSID</fieldfunction>
			<caption>key_process_
information<
run</caption>
			
<summary>true<
<filter>true</
summary>
filter>
			
<fieldtype>label<
<filtertextoption>equal</
fieldtype>
filtertextoption>			
<label>key_process_information</label>

			
<link>drilldown:provisioning/tucano/request_processInformation;hidefilters~true~PROVISIONINGREQUESTS.PROVREQID~((PROVISIONINGREQUESTS.PROVREQID))</link>
<filterlookupname>dataset;processrun.paymentgateway.loadpayeezy;PROCESSRUNLOGID;PROCESSRUNLOGNUM:PROCESSID:PROCESSRUNLOGSTARTDATE:PROCESSRUNLOGENDDATE</filterlookupname>
		</field>
		
</fieldlist> </summary>

Image Removed

b. Provisioning Request Parameters

Ui expand
titleProvisioning Parameters
Code Block
languagexml
titlerequest_parameters.xml
linenumberstrue
collapsetrue
<summary>
	<title>key_provisioning_request_parameters</title>
	<sql>FROM PROVREQUESTPARAMETERS
		LEFT JOIN USERS CREATEDBY ON CREATEDBY.USERID = PROVREQUESTPARAMETERS.PROVREQPARAMCREATEDBYUSERID
		LEFT JOIN USERS UPDATEDBY ON UPDATEDBY.USERID = PROVREQUESTPARAMETERS.PROVREQPARAMUPDATEDBYUSERID
		LEFT JOIN OUUNITS CREATEDBYUNIT ON CREATEDBYUNIT.OUUID = PROVREQUESTPARAMETERS.PROVREQPARAMCREATEDBYOUUID
		LEFT JOIN OUUNITS UPDATEDBYUNIT ON UPDATEDBYUNIT.OUUID = PROVREQUESTPARAMETERS.PROVREQPARAMUPDATEDBYOUUID
		LEFT JOIN PROVISIONINGREQUESTS ON PROVISIONINGREQUESTS.PROVREQID = PROVREQUESTPARAMETERS.PROVREQID
		WHERE PROVREQUESTPARAMETERS.PROVREQPARAMDELETED = 0
	</sql>
	<rowsperpage>20</rowsperpage>
	<primaryfield>PROVREQUESTPARAMETERS.PROVREQPARAMID</primaryfield>
	<mainlinkfield>PROVREQUESTPARAMETERS.PROVREQPARAMID</mainlinkfield>
	<autosearch>true</autosearch>
	<hidefindbutton>true</hidefindbutton>
	<module>CUSTOM_TUCANO</module>
	<fieldlist>
		<!-- external filters -->
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQID</fieldname>
			<filtertextoption>equal</filtertextoption>
		</field>
		<!-- basic search -->
		<!-- advanced search -->
		<!-- fields -->
		<field>
			<fieldname>TYPE</fieldname>
			<fieldfunction>PROVREQUESTPARAMETERS.PROVREQPARAMNAME</fieldfunction>
			<caption>key_name</caption>
			<summary>true</summary>
			<fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getParameterTypeOptions:key_n/a</fixedlookup>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMSTRINGVALUE</fieldname>
			<caption>key_string_value</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMINTEGERVALUE</fieldname>
			<caption>key_integer_value</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMDATEVALUE</fieldname>
			<caption>key_date_value</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMFLOATVALUE</fieldname>
			<caption>key_float_value</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMCHARVALUE</fieldname>
			<caption>key_char_value</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>CREATEDBYUSERNAME</fieldname>
			<fieldfunction>CREATEDBY.USERNAME</fieldfunction>
			<caption>key_created_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUSERNAME</fieldname>
			<fieldfunction>UPDATEDBY.USERNAME</fieldfunction>
			<caption>key_updated_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>CREATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>CREATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_created_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>UPDATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_updated_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMCREATEDDATE</fieldname>
			<fieldtype>date</fieldtype>
			<caption>key_date_created</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVREQUESTPARAMETERS.PROVREQPARAMUPDATEDDATE</fieldname>
			<fieldtype>date</fieldtype>
			<caption>key_date_updated</caption>
			<expand>true</expand>
		</field>
		<!-- drilldowns -->
	</fieldlist>
</summary>

Image Removed

c. Provisioning Request Process Information

Ui expand
titleProcess Information
Code Block
languagexml
titlerequest_parameters.xml
linenumberstrue
collapsetrue
<summary>
	<title>key_provisioning_request_parameters</title>
	<sql>FROM PROVISIONINGREQUESTS
		LEFT JOIN USERS CREATEDBY ON CREATEDBY.USERID = PROVISIONINGREQUESTS.PROVREQCREATEDBYUSERID
		LEFT JOIN USERS UPDATEDBY ON UPDATEDBY.USERID = PROVISIONINGREQUESTS.PROVREQUPDATEDBYUSERID
		LEFT JOIN OUUNITS CREATEDBYUNIT ON CREATEDBYUNIT.OUUID = PROVISIONINGREQUESTS.PROVREQCREATEDBYOUUID
		LEFT JOIN OUUNITS UPDATEDBYUNIT ON UPDATEDBYUNIT.OUUID = PROVISIONINGREQUESTS.PROVREQUPDATEDBYOUUID
		LEFT JOIN PROCESSRUNLOG ON PROCESSRUNLOG.PROCESSRUNLOGID = PROVISIONINGREQUESTS.PROCESSID
		WHERE 1 = 1
	</sql>
	<rowsperpage>20</rowsperpage>
	<primaryfield>PROVISIONINGREQUESTS.PROVREQID</primaryfield>
	<mainlinkfield>PROVISIONINGREQUESTS.PROVREQID</mainlinkfield>
	<autosearch>true</autosearch>
	<hidefindbutton>true</hidefindbutton>
	<module>CUSTOM_TUCANO</module>
	<fieldlist>
		<!-- external filters -->
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQID</fieldname>
			<filtertextoption>equal</filtertextoption>
		</field>
		<!-- basic search -->
		<!-- advanced search -->
		<!-- fields -->
		<field>
			<fieldname>PROCESSNAME</fieldname>
			<fieldfunction>PROVISIONINGREQUESTS.PROCESSNAME</fieldfunction>
			<caption>key_process_name</caption>
			<summary>true</summary>
			<fixedlookup>ejb/MYCOMPANYCRMUITucanoServiceProvisioningRequest.getProvRequestProcessNameOptions:key_n/a</fixedlookup>
		</field>
		<field>
			<fieldname>PROCESSRUNDEFINITION</fieldname>
			<fieldfunction>PROCESSRUNLOG.PROCESSRUNLOGNUM</fieldfunction>
			<caption>key_process_run</caption>
			<summary>true</summary>
		</field>
		
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQPROVREFNUM</fieldname>
			<caption>key_reference_number</caption>
			<summary>true</summary>
		</field>
		<field>
			<fieldname>PRIORITY</fieldname>
			<fieldfunction>PROVISIONINGREQUESTS.PROVREQPRIORITY</fieldfunction>
			<caption>key_priority</caption>
			<summary>true</summary>
			<fixedlookup>ejb/CRMUITucanoServiceProvisioningRequest.getPriorityOptions:key_n/a</fixedlookup>
		</field>
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQERRORCODE</fieldname>
			<caption>key_error_code</caption>
			<summary>true</summary>
		</field>

		<field>
			<fieldname>CREATEDBYUSERNAME</fieldname>
			<fieldfunction>CREATEDBY.USERNAME</fieldfunction>
			<caption>key_created_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUSERNAME</fieldname>
			<fieldfunction>UPDATEDBY.USERNAME</fieldfunction>
			<caption>key_updated_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>CREATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>CREATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_created_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>UPDATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_updated_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQCREATEDDATE</fieldname>
			<fieldtype>date</fieldtype>
			<caption>key_date_created</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQUPDATEDDATE</fieldname>
			<fieldtype>date</fieldtype>
			<caption>key_date_updated</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQERRORDESC</fieldname>
			<caption>key_error_description</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PROVISIONINGREQUESTS.PROVREQREQUEST</fieldname>
			<caption>key_request</caption>
			<summary>false</summary>
			<expand>true</expand>
			<available>true</available>
			<filter>false</filter>
		</field>
		<!-- drilldowns -->
	</fieldlist>
</summary>

Image Removed

7. Data Entry Page

You will need to create one data entry page for the provisioning provider. For more information on creating custom data entry pages go to Customize Data Entry Pages.

<page> <id>provisioning/tucano/provider</id> <name>key_provisioning_provider</name> <datapath>number</datapath> <module>CUSTOM_TUCANO</module> <functioncall> <functions> <function> </function> </functions> </functioncall> <datasources> <datasource> <key>form</key> <classname>com.crm.web.generator.datasource.DTODatasource</classname> </datasource> </datasources> <mainmenu> <components> <component> <id>cmpEdit</id> <name>key_edit</name> <visiblemodes>read</visiblemodes> <elements> <button> <id>btnEdit</id> <name>key_edit</name> <visibilityconditions>'[[getValue,java.lang.String,isEditable]]'!='0'</visibilityconditions> <setmode>edit</setmode> <refresh>page</refresh> <disableonclick>true</disableonclick> <functioncall> <functions> <function> <type>ejb</type> <classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname> <functionname>editButton</functionname> <resultaction>replace</resultaction> <datatype>root</datatype> <parameters> <parameter> <value>[[getDTO]]</value> <datatype>java.lang.Object</datatype> </parameter> </parameters> </function> </functions> </functioncall> </button> <button> <id>btnEdit</id> <name>key_edit</name> <visibilityconditions>'[[getValue,java.lang.String,isEditable]]'=='0'</visibilityconditions> <style>TopToolbarItemsDisabled</style> </button> </elements> </component> <component> <id>cmpSave</id> <name>key_save</name> <visiblemodes>edit,new</visiblemodes> <elements> <button> <id>btnSave</id> <name>key_save</name> <setmode>read</setmode> <refresh>page</refresh> <functioncall> <functions> <function> <type>ejb</type> <classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname> <functionname>saveButton</functionname> <resultaction>replace</resultaction> <datatype>root</datatype> <parameters> <parameter> <value>[[getDTO]]</value> <datatype>java.lang.Object</datatype> </parameter> </parameters> </function> </functions> </functioncall> </button> </elements> </component> <component> <id>cmpCancel</id> <name>key_cancel</name> <visiblemodes>edit,new</visiblemodes> <elements> <button> <id>btnCancel</id> <name>key_cancel</name> <setmode>read</setmode> <refresh>page</refresh> <disableonclick>true</disableonclick> <functioncall> <functions> <function> <type>ejb</type> <classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname> <functionname>loadForm</functionname> <resultaction>replace</resultaction> <datatype>root</datatype> </function> </functions> </functioncall> </button> </elements> </component> </components> </mainmenu> <main> <components> <component> <id>cmpName</id> <name>key_name</name> <elements> <textbox> <id>txtName</id> <label>key_name</label> <datapath>name</datapath> <datatype>java.lang.String</datatype> </textbox> </elements> </component> <component> <id>cmpProvisioningProtocol</id> <name>key_provisioning_protocol</name> <elements> <textbox> <id>txtProvisioningProtocol</id> <label>key_provisioning_protocol</label> <datapath>protocol</datapath> <datatype>java.lang.String</datatype> <readonly>true</readonly> </textbox> </elements> </component> <component> <id>cmpAltCode</id> <name>key_alternative_code</name> <elements> <textbox> <id>txtAltCode</id> <label>key_alternative_code</label> <datapath>altCode</datapath> <datatype>java.lang.String</datatype> </textbox> </elements> </component> <component> <id>cmpLifeCycleState</id> <name>key_life_cycle_state</name> <elements> <selectbox> <id>slbLifeCycleState</id> <label>key_life_cycle_state</label> <lookuptype>ejb</lookuptype> <datapath>lifeCycleState</datapath> <datatype>enum</datatype> <refresh>page</refresh> <classname>com.crm.dataobject.provisioning.ProvProviderLifeCycleState</classname> <reload>true</reload> <onload> <type>ejb</type> <classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname> <functionname>getLifeCycleStateOptions</functionname> </onload> </selectbox> </elements> </component> <component> <id>cmpURL</id> <name>key_url</name> <elements> <textbox> <id>txtURL</id> <label>key_url</label> <datapath>provisioningParameters/url</datapath> <datatype>java.lang.String</datatype> </textbox> </elements> </component> <component> <id>cmpIdentityKey</id> <name>key_identity_key</name> <elements> <password> <id>pswIdentityKey</id> <label>key_identity_key</label> <datapath>provisioningParameters/identityKey</datapath> <datatype>java.lang.String</datatype> </password> </elements> </component> <component> <id>cmpUsername</id> <name>key_username</name> <elements> <textbox> <id>txtUsername</id> <label>key_username</label> <datapath>provisioningParameters/username</datapath> <datatype>java.lang.String</datatype> </textbox> </elements> </component>
<field>
			<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQEXECUTIONDATE</fieldname>
			<caption>key_execution_date</caption>
			<summary>true</summary>
			<filter>true</filter>
			<fieldtype>date</fieldtype>
			<filtertextoption>range</filtertextoption>
		</field>
		
		<field>
			<fieldname>LIFECYCLESTATE_FILTER</fieldname>
			<fieldfunction>PAYMENTGATEWAYREQUESTS.LIFECYCLESTATE</fieldfunction>
			<caption>key_life_cycle_state</caption>
			<filter>true</filter>
			<fixedlookup>ejb/CRMUIPaymentGatewayRequest.getLifeCycleStateOptions:key_all</fixedlookup>
		</field>
		<field>
			<fieldname>LIFECYCLESTATE</fieldname>
			<fieldfunction>PAYMENTGATEWAYREQUESTS.LIFECYCLESTATE</fieldfunction>
			<caption>key_life_cycle_state</caption>
			<summary>true</summary>
			<fixedlookup>ejb/CRMUIPaymentGatewayRequest.getLifeCycleStateOptions:key_n/a</fixedlookup>
		</field>
		
		<field>
			<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQERRORCODE</fieldname>
			<caption>key_error_code</caption>
			<summary>true</summary>
		</field>
	
		<field>
			<fieldname>CREATEDBY_FILTER</fieldname>
			<fieldfunction>CREATEDBY.USERID</fieldfunction>
			<caption>key_created_by_user</caption>
			<filter>true</filter>
			<filteronexpand>true</filteronexpand>
			<filterlookupname>dataset;users.load;userid;username:name</filterlookupname>
		</field>
		<field>
			<fieldname>UPDATEDBY_FILTER</fieldname>
			<fieldfunction>UPDATEDBY.USERID</fieldfunction>
			<caption>key_updated_by_user</caption>
			<filter>true</filter>
			<filteronexpand>true</filteronexpand>
			<filterlookupname>dataset;users.load;userid;username:name</filterlookupname>
		</field>
		<field>
			<fieldname>CREATEDBYUNIT_FILTER</fieldname>
			<fieldfunction>CREATEDBYUNIT.OUUID</fieldfunction>
			<caption>key_created_by_unit</caption>
			<filter>true</filter>
			<filteronexpand>true</filteronexpand>
			<filterlookupname>dataset;networkmanagement.loadunits;ouuid;ouuname:ougname:oucname</filterlookupname>
		</field>
		<field>
			<fieldname>UPDATEDBYUNIT_FILTER</fieldname>
			<fieldfunction>UPDATEDBYUNIT.OUUID</fieldfunction>
			<caption>key_updated_by_unit</caption>
			<filter>true</filter>
			<filteronexpand>true</filteronexpand>
			<filterlookupname>dataset;networkmanagement.loadunits;ouuid;ouuname:ougname:oucname</filterlookupname>
		</field>
		<field>
			<fieldname>CREATEDBYUSERNAME</fieldname>
			<fieldfunction>CREATEDBY.USERNAME</fieldfunction>
			<caption>key_created_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUSERNAME</fieldname>
			<fieldfunction>UPDATEDBY.USERNAME</fieldfunction>
			<caption>key_updated_by_user</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>CREATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>CREATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_created_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>UPDATEDBYUNITOUUNAME</fieldname>
			<fieldfunction>UPDATEDBYUNIT.OUUNAME</fieldfunction>
			<caption>key_updated_by_unit</caption>
			<expand>true</expand>
		</field>
		<field>
			<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQCREATEDDATE</fieldname>
			<caption>key_date_created</caption>
			<expand>true</expand>
			<filter>true</filter>
			<fieldtype>date</fieldtype>
			<filtertextoption>range</filtertextoption>
			<filteronexpand>true</filteronexpand>
		</field>
		<field>
			<fieldname>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQUPDATEDDATE</fieldname>
			<caption>key_date_updated</caption>
			<expand>true</expand>
			<filter>true</filter>
			<fieldtype>date</fieldtype>
			<filtertextoption>range</filtertextoption>
			<filteronexpand>true</filteronexpand>
		</field>
		<field>
			<fieldname>PAYGATEWAYREQERRORDESC</fieldname>
			<fieldfunction>PAYMENTGATEWAYREQUESTS.PAYGATEWAYREQERRORDESC</fieldfunction>
			<caption>key_error_description</caption>
			<expand>true</expand>
		</field>
	</fieldlist>
</summary>
Ui expand
titleProvisioning Provider

Note that, generic components should be used for Log Information and Allowed Application Servers sections.

Code Block
titleproviderCustom.xml
linenumberstrue
collapsetrue

7. Data Entry Page

You will need to create one data entry page for the payment gateway. For more information on creating custom data entry pages go to Customize Data Entry Pages.

 

Code Block
languagexml
titlesetting.xml
linenumberstrue
collapsetrue
<?xml version="1.0" encoding="UTF-8"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../xsd/dataEntry.xsd">
	<id>paymentgateway/payeezy/setting</id>
	<name/>
	<datapath>name</datapath>
	<entity></entity>	
	<module>CUSTOM_PAYEEZY</module>
	<functioncall>
		<functions>
			<function>
			</function>
		</functions>
	</functioncall>
	<datasources>
		<datasource>
			<key>form</key>
			<classname>com.crm.web.generator.datasource.DTODatasource</classname>
		</datasource>
	</datasources>
	<mainmenu>
		<components> 
			<component>
				
<id>cmpPassword<
<id>cmpHome</id>
				<name>key_
password<
home</name>
				<hideinmodal>true</hideinmodal>
				<visiblemodes>read</visiblemodes>
				<elements>
					
<password>
<button>
						
<id>pswPassword<
<id>btnHome</id>
						
<label>key
<name>key_
password<
home</
label>
name>
						
<datapath>provisioningParameters/password</datapath>
<setmode>read</setmode>
						<refresh>page</refresh>
						
<datatype>java.lang.String</datatype>
<url>page.do?act=summary&amp;xml=paymentgateway/payeezy/settings</url>
					</
password>
button>
				</elements>
			</component>

			<component>
				
<id>cmpAddressCountry<
<id>cmpNew</id>
				<name>key_
address_country<
new</name>
				<hideinmodal>true</hideinmodal>
				<visiblemodes>read</visiblemodes>
				<elements>
					
<textbox>
<button>
						
<id>txtAddressCountry<
<id>btnNew</id>
						
<label>key
<name>key_
address_country<
new</
label>
name>
						
<datapath>provisioningParameters
<setmode>new</
addressCountry</datapath>
setmode>
						
<datatype>java.lang.String</datatype>
<refresh>page</refresh>
					
</textbox>
	<functioncall>
				
</elements>
			<functions>
								
</component>
<function>
									<type>ejb</type>
					
<component>
				
<id>cmpLanguageID<
<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</
id>
classname>
							
<name>key_language_id</name>
		<functionname>createButton</functionname>
				
<elements>
					
<textbox>
<resultaction>replace</resultaction>
							
<id>txtLanguageID<
		<datatype>root</
id>
datatype>
						
<label>key_language_id</label>
			<parameters>
				
<datapath>provisioningParameters/languageID</datapath>
						
<datatype>java.lang.String</datatype>
<parameter>
				
</textbox>
				
</elements>
			
<
<value>PAYEEZY</
component>
value>
				
			
<component>
				
<id>cmpDefaultProductID</id>
<datatype>java.lang.String</datatype>
				
<name>key_default_product_id</name>
				
<elements>
		</parameter>
			
<textbox>
						
<id>txtDefaultProductID<
</
id>
parameters>
						
<label>key_default_product_id</label>
		</function>
						
<datapath>provisioningParameters/defaultProductID</datapath>
	</functions>
						
<datatype>java.lang.Integer</datatype>
</functioncall>
					</
textbox>
button>
				</elements>
			</component>
			
<component>
				
<id>cmpSTBMaterialID<
<id>cmpEdit</id>
				<name>key_
stb_material_id<
edit</name>
				<visiblemodes>read</visiblemodes>
				<elements>
					
<textbox>
<button>
						
<id>txtSTBMaterialID<
<id>btnEdit</id>
						
<label>key_stb_material_id</label>
<name>key_edit</name>
						<visibilityconditions>'[[getValue,java.lang.String,isEditable]]'!='0'</visibilityconditions>
						
<datapath>provisioningParameters
<setmode>edit</
stbMaterialID</datapath>
setmode>
						
<datatype>java.lang.Integer</datatype>
<refresh>page</refresh>
					
</textbox> </elements>
	<disableonclick>true</disableonclick>
			
</component>
			<functioncall>
			
<component>
				
<id>cmpProviderID</id>
<functions>
				
<name>key_provider_id</name>
				
<elements>
<function>
			
<textbox>
						
<id>txtProviderID<
<type>ejb</
id>
type>
						
<label>key_provider_id</label>
			<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
			
<datapath>provisioningParameters/providerID</datapath>
						
<datatype>java.lang.String</datatype>
<functionname>editButton</functionname>
					
</textbox>
				
<
<resultaction>replace</
elements>
resultaction>
			
</component>
			
			
<component>
<datatype>root</datatype>
				
<id>cmpTVEAdapter</id>
					
<name>key_tve_adapter</name>
<parameters>
					
<elements>
					
<textbox>
<parameter>
					
<id>txtTVEAdapter</id>
						
<label>key_tve_adapter</label>
<value>[[getDTO]]</value>
					
<datapath>provisioningParameters/tveAdapter</datapath>
						<datatype>java.lang.
String<
Object</datatype>
										</
textbox>
parameter>
									</
elements>
parameters>
			
</component>
					</function>
			
<component>
				
<id>cmpJWTKey<
</
id>
functions>
						
<name>key_jwt_key</name>
</functioncall>
					
<elements>
</button>
					
<password>
<button>
						
<id>pswJWTKey<
<id>btnEdit</id>
						
<label>key
<name>key_
jwt_key<
edit</
label>
name>
						
<datapath>provisioningParameters/jwtKey</datapath>
<visibilityconditions>'[[getValue,java.lang.String,isEditable]]'=='0'</visibilityconditions>
						
<datatype>java.lang.String</datatype>
<style>TopToolbarItemsDisabled</style>
					</
password>
button>
				</elements>
			</component>
			
<component>
				
<id>cmpJWTExpirationTime<
<id>cmpSave</id>
				<name>key_
jwt_expiration_time_in_seconds<
save</name>
				
<elements>
<visiblemodes>edit,new</visiblemodes>
				
<textbox>
<elements>
					
<id>txtJWTExpirationTime</id>
<button>
						
<label>key_jwt_expiration_time_in_seconds</label>
<id>btnSave</id>
						
<datapath>provisioningParameters/jwtExpirationTimeInSeconds</datapath>
<name>key_save</name>
						
<datatype>java.lang.Integer</datatype> </textbox>
<setmode>read</setmode>
						
<
<refresh>page</
elements>
refresh>
			
</component>
			<functioncall>
			
<component>
				
<id>cmpDistributorsDrilldown</id> <name>key_distributors</name>
<functions>
				
<elements>
				
<drilldown> <id>ddDistributors</id> <tabid>tabDistributors</tabid>
<function>
					
</drilldown>
				
<
<type>ejb</
elements>
type>
			
</component>
			
			
<component>
<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
				
<id>cmpServicesDrilldown</id>
					
<name>key_services<
<functionname>saveButton</
name>
functionname>
				
<elements>
					
<drilldown>
<resultaction>replace</resultaction>
								
<id>ddServices<
	<datatype>root</
id>
datatype>
				
<tabid>tabServices</tabid>
					
</drilldown>
<parameters>
				
</elements>
			
</component>
			<parameter>
			
<component>
				
<id>cmpDevicesDrilldown</id>
				
<name>key_devices</name>
<value>[[getDTO]]</value>
				
<elements>
					
<drilldown>
		<datatype>java.lang.Object</datatype>
				
<id>ddDevices</id>
						
<tabid>tabDevices<
</
tabid>
parameter>
					
</drilldown>
				</
elements>
parameters>
			
</component>
					</
components>
function>
	
</main>
	
<details>
		
<tabs>
			
<tab>
</functions>
					
<id>tabDevices<
	</
id>
functioncall>
				
<name>key_stb</name>
	</button>
				
<reload>true<
</
reload>
elements>
			
<datasourcesetkey>physicalGoods<
</
datasourcesetkey>
component>
			
<rowvisibilityconditions>
<component>
				
'[[getValue,java.lang.String,physicalGoods[CURRENT_ROW]/value]]'=='DECODER'
<id>cmpCancel</id>
				
<
<name>key_cancel</
rowvisibilityconditions>
name>
				
<functioncall>
<visiblemodes>edit,new</visiblemodes>
				
<functions>
<elements>
					
<function>
<button>
						
<type>ejb<
<id>btnCancel</
type>
id>
						
<classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname>
<name>key_cancel</name>
						
<functionname>loadPhysicalGoodsTab<
<setmode>read</
functionname>
setmode>
						
<resultaction>setreplace</resultaction>
<refresh>cancel,page.do?act=summary&amp;xml=paymentgateway/payeezy/settings</refresh>
					
<datapath>physicalGoods<
</
datapath>
button>
				</elements>
			
<datasourcesetkey>physicalGoods<
</
datasourcesetkey>
component>
		</components>
	</mainmenu>
	<main>
		
<parameters>
<components>
		
			
<parameter>
<component>
				
<value>[[getDTO]]</value>
<id>cmpEmpty</id>
				<elements>
					
<datatype>java.lang.Object</datatype>
<emptyline></emptyline>
				
</elements>
			</
parameter>
component>
			
			
</parameters>
<component>
				
<
<id>cmpParametersDrilldown</
function>
id>
				
</functions>
<name>key_parameter</name>
				
</functioncall>
<elements>
					
<tabmenu>
<drilldown>
					
<components>
	<id>ddParameters</id>
						
<component>
<tabid>tabParameters</tabid>
					
<id>cmpAdd<
</
id>
drilldown>
				</elements>
			
<name>key_add</name>
</component>
			
			<component>
				
<visiblemodes>edit,new<
<id>cmpParametersEmtpyDrilldown</
visiblemodes>
id>
				<name/>
				<elements>
					<emptyline/>
			
<modal>
	</elements>
			</component>
			<component>
			
<id>mdlAdd<
	<id>cmpEmptyLine</id>
				<elements>
                    <emptyline/>
				
<name>key_add</name>
</elements>
			</component> 
			<component>
			
<type>search<
	<id>cmpCurrenciesEmpty</
type>
id>
				<name/>
				
<refresh>tab,tabDevices</refresh>
<elements>
					<emptyline/>
				
<datasetname>products.loadtypes<
</
datasetname>
elements>
			</component>
			
			
<datasetreturnhiddenfield>PRODTYPEID</datasetreturnhiddenfield>
<component>
				<id>cmpEmpty1</id>
				
<filter>PRODUCTTYPES.PRODTYPECLASSIFICATION='PHYSICALGOODS
<visibilityconditions>'[[getAlias,java.lang.String,showPaymentType]]'!='1'</
filter>
visibilityconditions>
				<elements>
					
<assignments>
<emptyline></emptyline>
				</elements>
			</component>		
			
<assignment>

			<component>
				<id>cmpEmpty2</id>
				
<datapath>modal</datapath>
<visibilityconditions>'[[getAlias,java.lang.String,showRefundType]]'!='1'</visibilityconditions>
				<elements>
					
<datatype>alias<
<emptyline></
datatype>
emptyline>
				</elements>
			
</
assignment>
component>
			
			<component>
			
<
	<id>cmpEmpty3</
assignments>
id>
				<elements>
					
<onclosefunction>
<emptyline></emptyline>
				</elements>
			</component>
			
<functions>

			<component>
				<id>cmpEmpty4</id>
				
<function>
<elements>
					<emptyline></emptyline>
				</elements>
			
<type>ejb<
</
type>
component>
			
			<component>
				
<classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname>
<id>cmpEmpty5</id>
				<elements>
					
<functionname>addSetTopBoxButton</functionname>
<emptyline></emptyline>
				</elements>
			</component>
		
<resultaction>setappend</resultaction>
</components>
	</main>
	<details>
		<tabs>				
			
<datapath>physicalGoods</datapath>
<tab>
				<id>tabCurrencies</id>
				<name>key_currencies</name>
				
<datasourcesetkey>physicalGoods<
<datasourcesetkey>paymentGatewayCurrencies</datasourcesetkey>
				<functioncall>
					
<parameters>
<functions>
						<function>
							
<parameter>
<type>ejb</type>
							<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
							
<value>[[getDTO]]</value>
<functionname>loadCurrenciesTab</functionname>
							
<datatype>java.lang.Object</datatype>
<resultaction>setreplace</resultaction>
							
</parameter>
<datapath>paymentGatewayCurrencies</datapath>
							<datasourcesetkey>paymentGatewayCurrencies</datasourcesetkey>
							
<parameter>
<parameters>
								<parameter>
									<value>[[
getAlias,java.lang.String,modal
getDTO]]</value>
									
<datatype>java.
util
lang.
ArrayList<
Object</datatype>
								</parameter>
							
</parameters>
						</function>
					
</functions>
				</
onclosefunction>
functioncall>
				
</modal>
<tabmenu>
					
</elements> </component>
<components>
						<component>
							
<id>cmpRemove<
<id>cmpAdd</id>
							<name>key_
remove<
add</name>
							<visiblemodes>edit,new</visiblemodes>
							<elements>
								<button>
									
<id>btnRemove<
<id>btnAdd</id>
									<name>key_
remove<
add</name>
									<refresh>tab,
tabDevices<
tabCurrencies</refresh>
									<functioncall>
										<functions>
											<function>
												<type>ejb</type>
												<classname>ejb/
MYCOMPANYCRMUITucanoServiceProvider<
PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
												
<functionname>removePhysicalGoodButton<
<functionname>addCurrencyButton</functionname>
												
<datasourcesetkey>physicalGoods<
<datasourcesetkey>paymentGatewayCurrencies</datasourcesetkey>
												
<resultaction>markdeleted<
<resultaction>setappend</resultaction>
												<parameters>
									
<parameter>
										
<value>[[
getSelectedDTOs,java.lang.String,physicalGoods
getDTO]]</value>
										
<datatype>java.lang.Object</datatype>
									</parameter>
								
</parameters>
											</function>
										</functions>
									</functioncall>
								</button>
							</elements>
						</component>
					
</components>
	<component>
				
</tabmenu>
			
<components>
<id>cmpRemove</id>
					
<component>
		
<id>cmpSelect</id>
<name>key_remove</name>
						
<name />
	<visiblemodes>edit,new</visiblemodes>
							<elements>
							
<rowselector>
	<button>
									
<id>rowID<
<id>btnRemove</id>
									<name>key_remove</name>
		
<datapath>id</datapath>
							
<
<refresh>tab,tabCurrencies</
rowselector>
refresh>
						
</elements>
			
</component>
<functioncall>
					
<component>
					
<id>cmpProductType</id>
<functions>
					
<name>key_product_type</name>
						
<elements>
<function>
							
<textbox>
					<type>ejb</type>
				
<id>txtProduct</id>
								
<datapath>productType
<classname>ejb/
name<
PAYEEZYCRMUIPayeezyPaymentGatewaySetting</
datapath>
classname>
								
<readonly>true</readonly>
				
</textbox>
<functionname>removeCurrencyButton</functionname>
						
</elements>
						
<
<datasourcesetkey>paymentGatewayCurrencies</
component>
datasourcesetkey>
					
<component>
							
<id>cmpProductDescription<
<resultaction>setdelete</
id>
resultaction>
						
<name>key_description</name>
						
<elements>
<parameters>
							
<textbox>
						
<id>txtProductDescription</id>
<parameter>
								
<datapath>productType/description</datapath>
						
<readonly>true</readonly>
<value>[[getSelectedDTOs,java.lang.String,paymentGatewayCurrencies]]</value>
								
</textbox>
						
</elements>
<datatype>java.lang.Object</datatype>
						
</component>
				
</components>
			</
tab>
parameter>
					
			
<tab>
				
<id>tabServices<
</
id>
parameters>
				
<name>key_services</name>
				
<datasourcesetkey>services</datasourcesetkey>
			</function>
	
<functioncall>
					
<functions>
				</functions>
		
<function>
							
<type>ejb<
</
type>
functioncall>
								
<classname>ejb
</
MYCOMPANYCRMUITucanoServiceProvider</classname>
button>
							
<functionname>loadServicesTab<
</
functionname>
elements>
						
<resultaction>setreplace<
</
resultaction>
component>
					
<datapath>services<
</
datapath>
components>
				
<datasourcesetkey>services</datasourcesetkey>
</tabmenu>
				<components>
			
<parameters>
		<component>
						
<parameter>
<id>cmpSelect</id>
						<name/>
				
<value>[[getDTO]]</value>
		<elements>
							
<datatype>java.lang.Object</datatype>
<rowselector>
								
<
<id>rowID</
parameter>
id>
							
<
	<datapath>id</
parameters>
datapath>
							</
function>
rowselector>
						</
functions>
elements>
					</
functioncall>
component>
				
<tabmenu>
	
<components>
<component>
						
<id>cmpAdd<
<id>cmpCurrency</id>
						<name>key_
add<
currency</name>
						
<visiblemodes>edit,new</visiblemodes>
<elements>
							
<elements>
<selectbox>
								
<modal>
<id>slbCurrency</id>
								
<id>mdlAdd<
<lookuptype>ejb</
id>
lookuptype>
								
<name>key_add</name>
<datapath>currency</datapath>
								
<type>search<
<datapathid>id</
type>
datapathid>
								
<refresh>tab,tabServices;tab,tabDistributors</refresh>
<classname>com.crm.dataobject.platform.CRMDOCurrency</classname>
								
<datasetname>products.loadservices</datasetname>
<datatype>load</datatype>
								
<datasetreturnhiddenfield>PRODID<
<reload>true</
datasetreturnhiddenfield>
reload>
								
<assignments>
<refresh>page</refresh>
								
<assignment>
<onload>
									
<datapath>modal<
<type>ejb</
datapath>
type>
									
<datatype>alias</datatype>
<classname>ejb/CRMUIPaymentGatewaySetting</classname>
									
<
<functionname>getCurrencyCodeOptions</
assignment>
functionname>
									
</assignments>
<parameters>
									
<onclosefunction>
	<parameter>
											
<functions>
<value>[[getDTO]]</value>
											
<function>
<datatype>java.lang.Object</datatype>
										</parameter>
			
<type>ejb</type>
						</parameters>
						
<classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname>
		</onload>
							</selectbox>
					
<functionname>addServiceButton<
	</
functionname>
elements>
					</component>
				</components>
			
<resultaction>setappend<
</
resultaction>
tab>	
			
			<tab>
				
<datapath>services<
<id>tabParameters</
datapath>
id>
				<rowvisibilityconditions>'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/isVisible]]'==1</rowvisibilityconditions>
				<name>key_parameters</name>
				
<datasourcesetkey>services<
<datasourcesetkey>gatewayParameters</datasourcesetkey>
				<functioncall>
					
<parameters>
<functions>
						<function>
							
<parameter>
<type>ejb</type>
							<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
							
<value>[[getDTO]]</value>
<functionname>loadParametersTab</functionname>
							<resultaction>setreplace</resultaction>
							
<datatype>java.lang.Object</datatype>
<datapath>gatewayParameters</datapath>
							<datasourcesetkey>gatewayParameters</datasourcesetkey>
							
<
<datasortby>order,asc</
parameter>
datasortby>
							<parameters>
								<parameter>
									
<value>[[
getAlias,java.lang.String,modal
getDTO]]</value>
									
<datatype>java.
util
lang.
ArrayList<
Object</datatype>
								
</parameter>
							
</parameters>
						</function> 
						<function>
							
<
<type>ejb</
functions>
type>
							
</onclosefunction>
<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
							
<
<functionname>echoDTOs</
modal>
functionname>
							
<
<resultaction>setoverwrite</
elements>
resultaction>
						
<
	<datasourcesetkey>gatewayParameters</
component>
datasourcesetkey>
							
<component>
<datasortby>order,asc</datasortby>
							
<id>cmpRemove</id>
<parameters>
								
<name>key_remove</name>
<parameter>
								
<visiblemodes>new,edit</visiblemodes>
	<value>[[getAllDTOs,java.lang.String,gatewayParameters]]</value>
							
<elements>
		<datatype>java.lang.Object</datatype>
								
<button>
</parameter>
							
<id>btnRemove<
</
id>
parameters>
						
<name>key_remove</name>
</function>
					</functions>
				
<refresh>tab,tabServices;tab,tabDistributors</refresh>
</functioncall>
				<tabmenu>
					
<functioncall>
<components>
					</components>
				
<functions>
</tabmenu>
				
<components>
					
<function>
<component>
						<id>cmpSelect</id>
						
<type>ejb<
<name/
type>
>
						<elements>
						
<classname>ejb/MYCOMPANYCRMUITucanoServiceProvider</classname>
	<rowselector>
								<id>rowID</id>
				
<functionname>removeServiceButton</functionname>
				<datapath>id</datapath>
							
<datasourcesetkey>services<
</
datasourcesetkey>
rowselector>
						</elements>
					
<resultaction>markdeleted<
</
resultaction>
component>
					<component>
						
<parameters>
<id>cmpParameter</id>
						<name>key_parameter</name>
						
<parameter>
<elements>
							<textbox>
							
<value>[[getSelectedDTOs,java.lang.String,services]]</value>
	<id>txtParameter</id>
								<datapath>parameter/name</datapath>
						
<datatype>java.lang.Object</datatype>
		<readonly>true</readonly>
								<datatype>alias</datatype>
							</
parameter>
textbox>
						</elements>
					
</
parameters>
component>
					<component>
						
<
<id>cmpValue</
function>
id>
						<name>key_value</name>
				
</functions>
		<elements>
							
</functioncall>
<textbox>
								
</button>
<visibilityconditions>
							
</elements> </component>
		'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/type]]'=='String' &amp;&amp;
					
</components>
				
</tabmenu>
('[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_MERCHANT_TOKEN' ||
				
<components>
					
<component>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_URL' || 
						
<id>cmpSelect</id>
			
<name/>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_TA_TOKEN' ||
						
<elements>
			
<rowselector> <id>rowID</id>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_API_KEY' ||
									
<datapath>id</datapath>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_MERCHANT_TOKEN' ||
							
</rowselector>
		'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_URL' || 
						
</elements>
			
</component> <component>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_TA_TOKEN' ||
						
<id>cmpProduct</id>
			
<name>key_product</name>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_API_KEY') 
						
<elements>
		
<textbox>
</visibilityconditions>
								
<id>txtProduct<
<id>txtValue</id>
								
<datapath>product
<datapath>value/
code<
stringValue</datapath>
								
<readonly>true<
<width>50%</
readonly>
width>
							</textbox>
						
</elements> </component>
	<selectbox>
			
<component>
					
<id>cmpProductDescription<
<id>slbMode</id>
						
<name>key_description</name>
		<visibilityconditions>
				
<elements>
					
<textbox>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/type]]'=='String' &amp;&amp;
									
<id>txtProductDescription</id>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='MODE' 
								
<datapath>product
</
description</datapath>
visibilityconditions>
								
<readonly>true<
<lookuptype>ejb</
readonly>
lookuptype>
							
</textbox>
	<datapath>value/stringValue</datapath>
						
</elements>
		
</component> <component>
<datatype>enum</datatype> 
						
<id>cmpProductIdentifier</id> <name>key_provisioning_system_identifier</name> <elements>
		<classname>com.crm.dataobject.paymentgateway.braintree.BraintreeMode</classname>
								
<textbox>
<refresh>section,secAuthenticationSettings</refresh>
								
<id>txtProductIdentifier</id>
<onload>
								
<datapath>value<
	<type>ejb</
datapath>
type>
								
</textbox>
	<classname>ejb/PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
						
</elements>
			
<
<functionname>getModeOptions</
component>
functionname>
					
</components>
			</
tab>
onload>
			
<tab>
					
<id>tabDistributors</id>
<onchange>
					
<name>key_distributors</name>
				
<datasourcesetkey>provisioningDistributors</datasourcesetkey>
<functions>
				
<functioncall>
						
<functions>
<function>
						
<function>
					
<type>ejb</type>
											<classname>ejb/
MYCOMPANYCRMUITucanoServiceProvider<
PAYEEZYCRMUIPayeezyPaymentGatewaySetting</classname>
							
<functionname>loadDistributorsTab<
				<functionname>setParametersVisibility</functionname>
											
<resultaction>setreplace<
<resultaction>replace</resultaction>
							
<datapath>provisioningDistributors</datapath>
				<datatype>root</datatype>
								
<datasourcesetkey>provisioningDistributors</datasourcesetkey>
			<parameters>
				
<parameters>
								<parameter>
													<value>[[getDTO]]</value>
													<datatype>java.lang.Object</datatype>
								
</parameter>
				</
parameters>
parameter>
						
</function>
					</
functions>
parameters>
				
</functioncall>
				
<components>
		
</function>
				
<component>
				
<id>cmpDistributorName<
</
id>
functions>
						
<name>key_name</name> <elements> <textbox> <id>txtDistributorName</id>
	</onchange>
								
<datapath>name<
<width>50%</
datapath>
width>
							</
textbox>
selectbox>
						
</elements>
	<password>
					
</component>
			<visibilityconditions>
		
<component>
							
<id>cmpDistributorAltCode</id>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/type]]'=='String' &amp;&amp;
						
<name>key_alternative_code</name>
			('[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_API_SECRET' ||
						
<elements>
			'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='TEST_JS_SECURITY_KEY' ||
				
<textbox>
					
<id>txtDistributorAltCode</id>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_API_SECRET' ||
									
<datapath>altCode</datapath>
'[[getValue,java.lang.String,gatewayParameters[CURRENT_ROW]/parameter/name]]'=='LIVE_JS_SECURITY_KEY')
								</
textbox>
visibilityconditions>
						
</elements>
		
</component>
<id>pswPassword</id>
					
<component>
			
<id>cmpDistributorDescription</id> <name>key_description</name>
<datapath>value/stringValue</datapath>
					
<elements>
			
<textbox>
<datatype>java.lang.String</datatype>
								
<id>txtDistributorDescription<
<width>50%</
id>
width>
							
<datapath>description<
</
datapath>
password>							
</textbox>

						</elements>
					</component>
				</components>
			</tab>
		</tabs>
	</details>
</page>
providerCustomlayout<page>
Code Block
languagexml
title
settinglayout.xml
linenumberstrue
collapse
true
true
<?xml version="1.0" encoding="UTF-8"?><page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../xsd/dataEntryLayout.xsd">
	<mainmenu>
		<components>
			<component><id>cmpEdit</id></component>
			<component><id>cmpSave</id></component>
			<component><id>cmpCancel</id></component>
			<component><id>cmpActions</id></component>
		</components>
	</mainmenu>
	<main>
		<view>
			<type>areas</type>
			<screenareas>
				<screenarea>
					<leftscreenarea>
						<sections>
							<section><id>secMainInformation</id></section>

<section><id>secDistributors</id></section>
							
<section><id>secServices<
<section><id>secAuthenticationSettings</id></section>
							
<section><id>secPhysicalGoods<
<section><id>secSupportedAttributes</id></section>
				
<section><id>secAllowedApplicationServers</id></section>
			
<section><id>secLogInformation</id></section>
						</sections>
					</leftscreenarea>
				</screenarea>
			</screenareas>
		</view>
		<sections>
			<section>
				<id>secMainInformation</id>
				<name>key_main_information</name>
				<disable>false</disable>
				
<subsections>
<instruction>key_instruction_setting_sec_main_information</instruction>
				
<id>secProvider</id>
<left>
					
<id>secConnectionParameters</id>
<components>
				
</subsections> </section>
		<component><id>file:general/name.xml</id></component>
						<component><id>file:general/altCode.xml</id></component>
			
<section>
			
<id>secProvider</id>
<component><id>file:paymentgateway/paymentGateway.xml</id></component>					
<name>key_provider_information</name>

					
<disable>false<
</
disable>
components>
				
<instruction>key_instruction_billing_provisioning_tucano_provider_main_information_provider</instruction>
</left>
				
<left>
<right>
					
<columns>2</columns>
<components>
					
<components>
	<component><id>file:paymentgateway/lifeCycleState.xml</id></component>
						
<component><id>cmpName<
<component><id>file:general/description.xml</id></component>
						
<component><id>cmpProvisioningProtocol</id></component>

					
<component><id>cmpAltCode</id></component>
</components>
				</right>
			</section>
			
<component>
<section>
				<id>secLogInformation</id>
			
<id>file:general/description_rowspan_2.xml</id>
	<name>key_log_information</name>
				<disable>false</disable>
				
<rowspan>2</rowspan>
<left>
					
</component>
<components>
						
<component><id>cmpLifeCycleState<
<component><id>file:loginfo/logInfoGroup.xml</id></component>
					</components>
				</left>
			</section>
		
			<section>
				
<id>secConnectionParameters<
<id>secAuthenticationSettings</id>
				<name>key_
connection
authentication_
parameters<
settings</name>
				<disable>false</disable>
				<instruction>key_instruction_
billing
setting_
provisioning
sec_
tucano_provider_main_information_connection_parameters<
authentication_settings</instruction>
				<left>
					
<columns>2</columns>
<components>
					
<components>
	<component>
						
<component><id>cmpURL</id><
	<id>cmpParametersDrilldown</id>
						</component>
					</components>
				
<component><id>cmpIdentityKey</id></component>
</left>
				<right>
					<components>
						<component>
							<id>cmpParametersEmtpyDrilldown</id>
						
<component><id>cmpUsername</id><
</component>
					
<component><id>cmpPassword</id></component>
</components>
				</right>
			
<component><id>cmpAddressCountry<
</
id></component>
section>
			
			
<component><id>cmpLanguageID</id></component>
<section>
				
<component><id>cmpDefaultProductID</id></component>
<id>secSupportedAttributes</id>
				
<component><id>cmpSTBMaterialID</id></component>
<name>key_supported_attributes</name>
				
<component><id>cmpProviderID</id></component>
<disable>false</disable>
				
<component><id>cmpTVEAdapter</id></component>
<subsections>
					
<component><id>cmpJWTKey</id></component>
<id>secFinancialSettings</id>
					
<component><id>cmpJWTExpirationTime</id></component>
<id>secCurrencies</id>
					
<
<id>secAllowedApplicationServers</
components>
id>
				</
left>
subsections>
			</section>
		
	
<section>
				
<id>secServices<
<id>secFinancialSettings</id>
				<name>key_financial_
services<
settings</name>
				
<disable>false</disable>
<instruction>key_
instruction
instructions_
billing
setting_
provisioning
generic_
tucano
sec_
provider_services_service_package_mapping<
financial_settings</instruction>
				<disable>false</disable>
				<left>
					<columns>3</columns>
					<components>
						
<component><id>cmpServicesDrilldown<
<component><id>file:paymentgateway/paymentMethod.xml</id></component>
						<component><id>file:paymentgateway/paymentType.xml</id></component>
						<component><id>cmpEmpty1</id></component>
					
</components> </left>
	<component><id>cmpEmpty3</id></component>
						<component><id>file:paymentgateway/paymentCancellationType.xml</id></component>
			
</section>
			<component>
			
<section>
				
<id>secPhysicalGoods<
<id>cmpEmpty5</id>
				
<name>key_physical_goods</name>
			<colspan>2</colspan>
				
<disable>false<
		</
disable>
component>
				
<instruction>key_instruction_billing_provisioning_perception_provider_physical_goods_devices</instruction>
		<component>
		
<left>
					
<components>
<id>file:paymentgateway/paymentPreferences.xml</id>
						
<component><id>cmpDevicesDrilldown</id><
</component>
					</components>
				</left>
			</section>
			
<section>
				
<id>secDistributors<
<id>secCurrencies</id>
				<name>key_
distributors<
currencies</name>
				<disable>false</disable>
				<instruction>key_instruction_
billing
setting_
provisioning
payeezy_
tucano
sec_
provider_distributors<
currencies</instruction>
				<left>
<columns>4</columns>

					<components>
						
<component><id>cmpDistributorsDrilldown<
<component><id>file:paymentgateway/currencies.xml</id></component>
					</components>
		
</left> </section> <section> <id>secAllowedApplicationServers</id> <name>key_allowed_application_servers</name> <disable>false</disable> <instruction>key_instruction_provisioning_conax_web_services_provider_sec_allowed_application_servers</instruction>
		</left>
				
<left>
<right>
					<components>
						
<component><id>file:platform/allowedApplicationServers.xml</
<component><id>cmpCurrenciesEmpty</id></component>
					</components>
				</
left>
right>
			</section>
			
			<section>
				
<id>secLogInformation<
<id>secAllowedApplicationServers</id>
				<name>key_
log
allowed_application_
information<
servers</name>
				<disable>false</disable>
				<instruction>key_instruction_provisioning_conax_web_services_provider_sec_allowed_application_servers</instruction>
				<left>
					<components>
						<component><id>file:
loginfo
platform/
logInfoGroup
allowedApplicationServers.xml</id></component>
					</components>
				</left>
			</section>
		</sections>
	</main>
	<details>
		
<view>default</view>
<tabs>			
<tabs>

			<tab>
				
<id>tabServices<
<id>tabCurrencies</id>
				<disable>true</disable>
				<preload>true</preload>
				<showheader>false</showheader>
				<components>
					<component><id>cmpSelect</id></component>
					
<component><id>cmpProduct<
<component><id>cmpCurrency</id></component>
				
<component><id>cmpProductDescription</id></component>
</components>
			
<component><id>cmpProductIdentifier</id></component>
</
components>
tab>
			
</tab>

			<tab>
				
<id>tabDevices<
<id>tabParameters</id>
				<disable>true</disable>
				<preload>true</preload>
				<showheader>false</showheader>
				<components>
					
<component><id>cmpSelect<
<component><id>cmpParameter</id></component>
					
<component><id>cmpProductType<
<component><id>cmpValue</id></component>
				
<component><id>cmpProductDescription</id></component>
</components>
			</tab>	
			<tab>
				
<id>tabDistributors<
<id>file:platform/allowedApplicationServers.xml</id>
				
<preload>true<
<disable>true</
preload>
disable>
				
<disable>true<
<preload>true</
disable>
preload>
				<showheader>false</showheader>
				<components>
					
<component><id>cmpDistributorName<
<component><id>cmpSelect</id></component>
					<component><id>cmpApplicationServer</id></component>
					
<component><id>cmpDistributorAltCode<
<component><id>cmpAddedBy</id></component>
					
<component><id>cmpDistributorDescription<
<component><id>cmpAddedOn</id></component>
				</components>
			</tab>
			
			<tab>
				<id>file:
platform
paymentgateway/
allowedApplicationServers
paymentPreferences.xml</id>
				<disable>true</disable>
				<preload>true</preload>
				
<showheader>false<
<showheader>true</showheader>
				<components>
					
<component><id>cmpSelect<
<component><id>cmpName</id></component>
					
<component><id>cmpApplicationServer<
<component><id>cmpPaymentMethod</id></component>
					
<component><id>cmpAddedBy</id></component> <component><id>cmpAddedOn<
<component><id>cmpDescription</id></component>
				</components>
			</tab>
		</tabs>
	</details>
</page>

 

Image Removed

8. Menu Options Metadata File

...