Forum OpenACS Development: Re: Heads-up: New Workflow Package
Tillman,
Below is a sample form which uses comments throughout. The form is used to register a news feed soap service.
ad_form -name register-service -form { # primary key for news feed news_feed_id:key(news_feed_from_seq_id) # fully qualified url of news instance on remote server {news_instance_url:text(text) {label "Remote News Instance URL (e.g. https://openacs.org/news/)"} {html {size 40}}} # soap service url on remote server {service_url:text(text) {label "Remote Web Service URL"} {html {size 40}}} # authentication token {token:text(text) {label "Registration Token"} {html {size 40}}} } # create option list for news instances on this server set options [db_list_of_lists get_options { select '--' as url, null::integer as object_id, 1 as orderby union select site_node__url(n.node_id) as url, n.object_id, 2 as orderby from apm_packages p, site_nodes n where p.package_id = n.object_id and p.package_key = 'news' order by orderby }] # add widget for selecting news instance to be used as the destination # for the news feed ad_form -extend -name register-service -form [list \ [list package_id:text(select) [list options $options] {label {Select News Destination}}] \ ] -validate { # make sure the user select a news instance source {package_id {![string equal $package_id ""]} "A Valid News Instance Destination on this Server must be Selected" } # make sure the news instance url is a fully qualified url {news_instance_url {[string match http://* $news_instance_url]} "The remote news instance URL must be a fully qualified URL that starts with http://" } # make sure that the soap service url is fully qualified {service_url {[string match http://* $service_url]} "The remote Web Service URL must be a fully qualified URL that starts with http://" } } -new_data { # convert the news instance url to a fully qualified url db_1row get_dest "select 'http://[ad_host][ad_port]' || site_node__url(node_id) as dest_url from site_nodes where object_id = :package_id" if ![string equal [string index $news_instance_url end] "/"] { append news_instance_url "/" } # get the service locator set nfs [nsjava::new org.nsjava.nsaxis.openacs.news.NewsFeedServiceLocator] # get the news service client stub and invoke registration on remote server set url [nsjava::new {java.net.URL String} $service_url] set stub [$nfs {getNewsFeed java.net.URL} $url] set result f nsjava::try { # soap call to register the news feed set result [$stub {enableRemoteNewsFeed String String String String} $news_instance_url $dest_url $token [ns_conn peeraddr]] } catch {java.rmi.RemoteException e} { # if registration fails, we will retry later ns_log Notice "registration failed: [$e toString]" } finally { set person_id [ad_conn user_id] # save registration info. If registration fails, we will retry later. db_dml set_feed_frominfo { insert into news_feed_from (news_feed_from_id, package_id, service_url, news_instance_url, token, registered_p, person_id) values (:news_feed_id, :package_id, :service_url, :news_instance_url, :token, :result, :person_id) } } ad_returnredirect index }