Example of Using Embedded eScript for Mortgage Calculation

For compound calculations, embedded eScript is a more appropriate mechanism. The following is an example of a mortgage calculation using eScript:

var Amount= 0;
var NumPeriods= 0;
var Rate= 0;
var InterestPaid = new Array;
var Payment = new Array;
var Period = new Array;
var PrincipleBalance = new Array;
var PrinciplePaid = new Array;
var PeriodPayment = 0;
var TotalInterest = 0;
var TotalPayment = 0;

function GetInput (Inputs)
{

	with(Inputs)
	{
		var temp;
		temp = GetProperty("Amount"?);
		if (temp.length!=0)

		Amount= ToNumber(temp);

		temp = GetProperty("NumPeriods");
		if (temp.length!=0)

		NumPeriods= ToNumber(temp);

		temp = GetProperty("Rate");
		if (temp.length!=0)

		Rate= ToNumber(temp);
	}
}
function Main()
{

	Period[0] = 0;
	InterestPaid[0] = 0;
	PrinciplePaid[0] = 0;
	Payment[0] =0;
	PrincipleBalance[0] = Amount;
	Rate = Rate /1200;
	PeriodPayment = Amount / (1.00/Rate - (1.00/Rate)/Math.pow((1.00+Rate), 
	NumPeriods));

	for(var i=1; i<=NumPeriods-1; i++)
	{ 

		Period[i] = i;
		InterestPaid[i] = PrincipleBalance[i-1]*Rate;
		Payment[i] = PeriodPayment;
		PrinciplePaid[i] = Payment[i]-InterestPaid[i];
		PrincipleBalance[i] = PrincipleBalance[i-1] - PrinciplePaid[i];
	}
		TotalPayment = NumPeriods * PeriodPayment;
		TotalInterest = TotalPayment - Amount;
}
function Service_PreInvokeMethod (MethodName, Inputs, Outputs)
{
		GetInput(Inputs);
		Main();
		SetOutput(Outputs);
		return( CancelOperation );
}

		function SetOutput (Outputs)
		{
		Outputs.SetType("Result");

		var psArray = TheApplication().NewPropertySet();
		psArray.SetType("Array");
		var len = InterestPaid.length;
		for(var j=0; j<=len-1; j++)
	{
			var psArrayElement = TheApplication().NewPropertySet();
			psArrayElement.SetProperty("InterestPaid",InterestPaid[j]);
			psArrayElement.SetProperty("Payment",Payment[j]);
			psArrayElement.SetProperty("Period",Period[j]);
			psArrayElement.SetProperty("PrincipleBalance",PrincipleBalance[j]);
			psArrayElement.SetProperty("PrinciplePaid",PrinciplePaid[j]);
			psArray.AddChild(psArrayElement);
		}
		Outputs.AddChild(psArray);
		var psPeriodPayment= TheApplication().NewPropertySet();
		psPeriodPayment.SetProperty("PeriodPayment",PeriodPayment);
		Outputs.AddChild(psPeriodPayment);

		var psTotalInterest= TheApplication().NewPropertySet();
		psTotalInterest.SetProperty("TotalInterest",TotalInterest);
		Outputs.AddChild(psTotalInterest);

		var psTotalPayment= TheApplication().NewPropertySet();
		psTotalPayment.SetProperty("TotalPayment",TotalPayment);
		Outputs.AddChild(psTotalPayment);
	}