Thursday, July 22, 2010
Access URL Parameters in Business Rules

Q. Hello - I am calling a createform view generated by COT from another asp.net application. Within my create form there are couple of lookup values that we want to default based on selections made from our asp.net application. Is there a way to pass default values through
url? Or are the default values only for filtering?

A.

Default values for new rows can be assigned based on the database content, parameters passed in the URL, and values stored in user session.

Please take a look at http://codeontime.com/Documents/Appointment%20Manager.pdf. On page 13 you will find the business rules method AssignDefaultSalesman.

The method is using BusinessRules.UpdateFieldValue to assign default values to the fields of the new record. The example shows how to make a database request to retrieve the value.

You can create a similar method following the technique described in the article and read parameters that were passed in the URL using one of the three methods shown in the sample business rules method below:

[RowBuilder("Products", RowKind.New)]
public void AssignDefaultValues()
{
    // method 1
    string doIt = (string)SelectExternalFilterFieldValue("DoIt");
    // method 2
    string doIt2 = (string)SelectFieldValue("DoIt");
    // method 3
    string doIt3 = null;
    foreach (FieldValue v in Request.ExternalFilter)
        if (v.Name.Equals("DoIt"))
            doIt3 = (string)v.Value;
}

The example assumes that a new row is created when a user has accessed the  URL with the parameter DoIt in it.

http://localhost:18443/HistoryDemo/Pages/Products.aspx?DoIt=339

The first method uses SelectExternFilterFieldValue to find the value of the external filter.

The second method uses a more generic SelectFieldValue that lookups up any available field values including the values in the current row and any action arguments or external filters.

The third approach is to iterate through the items in Request.ExternFilter array to detect the presence of the parameter in the URL.

It is not possible to use Context.Request.Params since the method is executed in response to a web service request that arrives from the client asynchronously when user clicks on New button. The client library collect any URL parameters and passes them to the method as Request.ExternalFilter array of values.

You can also use Context.Session object to access any session variables that were stored in the session previously.