Automatically fill in auto search parameters
Hello,
I would like to be able to automatically fill in auto search parameters from
the web without knowing anything about the underlying report. For example,
when I know a city and postal code in my web application I would like to
pass these to the web tier without knowing if there are autosearch fields
for city and postal code and without knowing anything about the report's
auto search fields from the web application.
Does a tutorial or document exist explaining how to implement this?
Thanks in advance,
Mariella
I would like to be able to automatically fill in auto search parameters from
the web without knowing anything about the underlying report. For example,
when I know a city and postal code in my web application I would like to
pass these to the web tier without knowing if there are autosearch fields
for city and postal code and without knowing anything about the report's
auto search fields from the web application.
Does a tutorial or document exist explaining how to implement this?
Thanks in advance,
Mariella
This discussion has been closed.
Comments
- there are three types of parameters are supported. Session Parameters,
Report Parameters, AutoSearch Parameters.
- check out the example referenced in the code below. Also check out the
RBServer online help topics for TrsWebTier and TrsWebRequest.
-------------------------------------------------------
Tech Tips: RB Server and Custom Parameters
-------------------------------------------------------
The RBServer Custom Parameter demos show how to define custom session and
report level parameters that can be used to implement security and other
types of custom processing.
The are three projects that work together. Each project includes a
ReadMe.doc and commented code.
1. RBServer\Demos\Servers\Custom Parameters
2. RBServer\Demos\WebTier\Custom Parameters
3. RBServer\Demos\Clients\Custom Parameters
The demos include examples of how to...
1. Define Custom Session parameters.
A custom login form is displayed. Based upon the login, the catalog of
reports available to the user is filtered.
2. Define Custom Report parameters
A custom parameter form is displayed. The parameters are used by the report.
3. Custom AutoSearch form
A custom autosearch form is displayed. The parameter values are used by the
autosearch criteria.
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Thanks for your answer. Unfortunately, it is not an answer to my question. I
do not want to implement custom parameters and I know how to display an auto
search form. What I'd like is to be able to automatically fill in values for
auto search values without knowing anything about the report. Let's look at
an example which might be the exact case:
- A report with autosearch values 'company' and 'department' exists.
- The (web) client is currently handling a data record which contains fields
'employeeid', 'job title', 'department', 'location', 'start date'
In this case I want the report to show up with 'department' already filled
in with the value of the record the client is currently handling. The client
does not know anything about the autosearch values of the report (The client
even does not know if the report uses auto search values).
Is there an easy way to implement this behaviour?
Kind regards,
Mariella
The Custom Parameters Demo shows how to handle autosearch parameters in
addition to session and report parameters. It does /not/ show how to do
exactly what you describe, because it shows the user a custom autosearch
form. However, I think it does show how to create a TrsWebRequest object and
call WebTier.GetAutosearchParameters(aWebRequest) to retrieve the autosearch
parameters from the server. Then you can update the
WebRequest.AutoSearchParameters and call WebTier.ProcessRequest(aWebRequest)
to generate the report.
In the RBServer\Demos\WebTier\Custom Parameters project...
1. The TWebModule1.WebModule1waDefaultAction method shows how to create a
TrsWebRequest object from the web broker TWebRequest QueryFields and
Content.
var
lWebRequest: TrsWebRequest;
begin
{use the incoming request parameters to create a TrsWebRequest}
lWebRequest := rsWebTier1.CreateWebRequest(Request.QueryFields,
Request.Content);
try
Response.Content := ProcessDefaultRequest(lWebRequest);
finally
lWebRequest.Free;
end;
2. Once you have a TrsWebRequest object you can call the
WebTier.GetAutoSearchParameters(aWebRequest) method to retrieve the
autosearch parameters from the server. They will be placed in the
WebRequest.AutoSearchParameters collection.
3. At this point you can update the parameter values for the
WebRequest.AutoSearchParameters
4. Call WebTier.ProcessWebRequest(aWebRequest) to generate the report.
Have a look at theses methods in the demo
- TWebModule1.ProcessDefaultRequest
- TWebModule1.ProcessAutoSearchRequest
- TWebModule1.GetAutoSearchParametersPage
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Thanks. Using GetAutoSearchParameters I now have it working. Now only one
issue left : When using GetAutoSearchParameters the auto search dialog is
not shown, causing auto search parameters which have not been filled in to
show all, even when they are required. Is there a way to force an auto
search parameters screen on startup after filling in defaults?
Kind regards,
Mariella
Try this....
// change requested content to the search form
myWebRequest.ContentParameters['content'].Value := 'searchform';
myWebTier.ProcessWebRequest(myWebRequest);
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
When I do it that way the search form shows up, but without any fields. When
I click the "Search" button (the only control) I get the report and only
when I press the search button after that I get a normal search form.
Kind regards,
Mariella
Kind regards,
Mariella
As my colleague replied earlier, this suggestion only works partially.
The search dialog now shows up without any search fields. We are
waiting to deliver a project until this problem is solved. So far RB
has served all our needs, hopefully we can solve this one as well.
Hoping to hear from you soon
regards
Paul Sjoerdsma
On Fri, 15 Dec 2006 10:53:48 -0600, "Nard Moseley \(Digital
Here is an example that shows how to set default autosearch field values
from the webtier and have them displayed in the autosearch dialog.
www.digital-metaphors.com/tips/rbWebAutoSearchCustom.zip
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
In my application it does not work correctly. The lSession variable is
always nil when first requesting a report. I tried to create a session
manually like:
if (lSession = nil) then
begin
sSessionDir := rsWebTier.CacheDirectory;
if (sSessionDir[Length(sSessionDir)] <> '\') then
sSessionDir := sSessionDir + '\';
sSessionDir := sSessionDir + Req.SessionID;
ForceDirectories(sSessionDir);
lSession := TrsWebSession.Create(Req.SessionID, sSessionDir,
scNew);
end;
I still get the same result. I get a search form only containing a button
"Search" whereby the filled in auto search parameters get lost. When I
remove
Req.ContentParameters['content'].Value := 'searchform';
the old behaviour occurs : The auto search values get filled in, but the
dialog gets skipped. Do you have any suggestions? I can send you the source
code if it may help..
Kind regards,
Mariella Bakker
P&A Group
- if you have not done so already, first try running the exact example
project that I posted. It works in my testing here
- perhaps in your application you are not using the report explorer
interface? I think in the example that I posted, the SessionId is assigned
when the report explorer is first displayed, so by the time the user chooses
a report, the SessionId exists.
- try modifying the example to call GetSessionForRequest rather than
GetSessionForID. Calling GetSessionForRequest can handle returning a new
session or an existing session as needed.
Example:
lSession := gWebSessionManager.GetSessionForRequest(aWebRequest);
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Using GetSessionForRequest did the trick. It is working correctly now at the
customers site.
Thanks a lot!
Kind regards,
Mariella
Great news - glad to hear it is working
--
Nard Moseley
Digital Metaphors
www.digital-metaphors.com
Best regards,
Nard Moseley
Digital Metaphors
www.digital-metaphors.com