Ahh. I see what you're asking now. Wish I could offer more. Sent from my mobile device.
On Feb 6, 2012, at 7:34 AM, Jim Lesinski <jim.lesin...@gmail.com> wrote: > Hi Joe, that's good information but I am looking to be able to use the web > service to populate the autocomplete values for one specific RT CustomField > within RT. When you are setting up a custom field the screen even says that > you can use a web service to populate the field's values, but I am not sure > how to do that and I cannot find documentation. > > Thanks, > Jim Lesinski > > > On Feb 6, 2012, at 7:19 AM, Joe Harris <drey...@gmail.com> wrote: > >>> I am looking at rt-4.0.5 and it seems that you can tie a custom field into a >>> web service. >> >> I created a PHP web form to try and drive requestors to put in the >> proper information. What I provided was a drop down box to show >> custom fields pulled from the RT database and then build a email to be >> sent to the queue the user chose. >> >>> Is there any documentation about using a webservice or does someone have an >>> example of its use? Or if someone has details about doing something like I >>> described above using another method I'd love to hear about that too. >> >> The following is the PHP code I used to pull the info (billing codes) >> from the customfieldvalues table where the ID of the custom field I am >> using is 1. Since this is a field that has a parent/child >> relationship, this creates an option group heading with the selectable >> fields in the drop down box under each option group. If you have just >> one field and no relationships, it is much more simple. This requires >> a database connection string which is in a file outside of my web >> directory. I know this may not be exactly what you are looking for, >> but the main part you are asking about I believe the part you are >> looking for specifically is down at the end of building the message >> where the custom fields are pushed into the email with commandbymail. >> Note, I found out the custom fields could NOT have any spaces in them >> for commandbymail to function. I hope this helps and is not too >> confusing. I am quite sure some of this could be done more >> efficiently. I am not a developer. I have a good understanding of >> php, but not always the most efficient way. >> >> ---connection_file--- >> <?php >> $host = "database_server"; >> $user = "postgres"; >> $pass = "dbpassword"; >> $db = "rtdb"; >> $conn_rtdb = pg_connect("host=$host dbname=$db user=$user >> password=$pass") or die("Couldn't Connect to $db".pg_last_error()); >> ?> >> ---connection_file--- >> ---ticket_form--- >> <?php >> //set page action based on how the user gets to the page (sendMail or >> showForm) >> $action = $_REQUEST['action']; >> global $action; >> ---form_code--- >> function showForm() { >> include('/path/to/connection_file'); >> $getclientproject = pg_query($conn_rtdb, "select name from >> customfieldvalues where customfield=1 order by name")or die("Get >> ClientProject " . pg_last_error()); >> $fields=pg_num_fields($getclientproject); >> echo "<tr><td>Task Code</td><td><select name=\"taskcode\">"; >> echo "<option value=\"\" selected>Select...</option>"; >> for ($i=0; $i < pg_num_fields($getclientproject); $i++) >> while ($row = pg_fetch_row($getclientproject)) { >> for ($f=0; $f < $fields; $f++) { >> echo "<optgroup label=\"$row[$f]\">$row[$f]"; >> $gettaskcodes = pg_query($conn_rtdb, "select c.name from >> customfieldvalues a,attributes b,customfieldvalues c where >> a.name=b.content and b.objectid=c.id and b.content='$row[$f]' order by >> c.name,c.sortorder")or die("Get Codes ".pg_last_error()); >> $fields=pg_num_fields($gettaskcodes); >> for ($i=0; $i < pg_num_fields($gettaskcodes); $i++) >> while ($row = pg_fetch_row($gettaskcodes)) { >> for ($f=0; $f < $fields; $f++) { >> echo "<option value=\"$row[$f]\">$row[$f]"; >> echo "</option>"; >> }} >> echo "</optgroup>"; >> }} >> echo "</select></td></tr>"; >> } >> //end action showForm >> ?> >> ---form_code--- >> >> Then I gather the form data to be pushed into RT as an email. I use >> the commandbymail plugin to allow fields to be populated via email. >> Then I build the email with PHP code to send to RT: >> >> ---form_submit--- >> <?php >> function sendMail() >> { >> include("/path/to/connection_file"); >> // Gather form data... each item that is pulled had its own field in >> the web form >> $to = $_REQUEST['sendto'] ; //whatever queue they chose in a dropdown >> box on the web form >> $from = "$_REQUEST['from_email']" ; >> $project = $_REQUEST['Project'] ; >> $priority = $_REQUEST['Priority'] ; >> $duedate = $_REQUEST['duedate'] ; >> $time = $_REQUEST['time'] ; >> $taskcode = $_REQUEST['taskcode'] ; >> $admincc = $_REQUEST['AdminCC'] ; >> //Get client project from RT database >> $getcp = pg_query($conn_rtdb, "select a.content from attributes a, >> customfieldvalues b where b.name='$taskcode' and b.id=a.objectid")or >> die("Get CP ".pg_last_error()); >> $rescp = pg_fetch_row($getcp); >> $cltprj = $rescp[0]; >> //create due date timestamp, concatenate fields and clean up strange >> characters >> $due = $duedate." ".$time ; >> $subjectdetails = >> pg_escape_string(stripslashes($_REQUEST['SubjectDetails'])) ; >> $body = pg_escape_string(stripslashes($_REQUEST['Body'])) ; >> $subject = $project.": " . $subjectdetails ; >> //Build data to be pushed into ticket for commandbymail >> $fields = array(); >> $fields{"Project"} = "Project"; >> $fields{"SubjectDetails"} = "Subject"; >> $fields{"Body"} = "Message"; >> foreach($fields as $a => $b) >> { >> $bodymessage .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]); >> } >> //Build message headers >> $headers = "From: $from\n"; >> $headers .= "Reply-To: $from\n"; >> $headers .= "MIME-Version: 1.0\n"; >> $headers .= "Content-Type: multipart/related; >> type=\"multipart/alternative\"; >> boundary=\"----=MIME_BOUNDRY_main_message\"\n"; >> $headers .= "X-Sender: $from\n"; >> $headers .= "X-Mailer: PHP4\n"; >> $headers .= "X-Priority: 3\n"; //1 = Urgent, 3 = Nmrmal >> $headers .= "Return-Path: <" . $_POST['Email'] . ">\n"; >> $headers .= "This is a multi-part message in MIME format.\n"; >> $headers .= "------=MIME_BOUNDRY_main_message \n"; >> $headers .= "Content-Type: multipart/alternative; >> boundary=\"----=MIME_BOUNDRY_message_parts\"\n"; >> //Build message contents >> $message = "------=MIME_BOUNDRY_message_parts\n"; >> $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; >> $message .= "Content-Transfer-Encoding: quoted-printable\n"; >> $message .= "\n"; >> /* Add custom message, in this case it's plain text. You could also >> add HTML by changing the Content-Type to text/html */ >> $message .= "Due: ".$duedate." ".$time."\n"; >> $message .= "Priority: ".$priority."\n"; >> if($admincc != 'none'){ >> $message .= "AdminCc: ".$admincc."\n"; >> } >> $message .= "CustomField.{Client_Project}: ".$cltprj."\n"; >> $message .= "CustomField.{Task_Code}: ".$taskcode."\n"; >> $message .= "CustomField.{Category}: ".$category."\n"; >> $message .= "\n"; >> $message .= "$bodymessage\n"; >> $message .= "\n"; >> $message .= "------=MIME_BOUNDRY_message_parts--\n"; >> $message .= "\n"; >> //Send message >> $ok = mail($to, $subject, $message, $headers); >> if($ok == 1) >> { >> echo "Your ticket has been sent."; >> } >> else >> { >> print "We encountered an error sending your mail, please notify the RT >> administrator"; >> } >> } >> ?. >> //Determine what state the form is in when the user gets to it >> <?php >> switch ($action) { >> case "send": >> sendMail(); >> showForm(); >> break; >> default: >> showForm(); >> } >> ?> -------- RT Training Sessions (http://bestpractical.com/services/training.html) * Boston March 5 & 6, 2012