<div dir="ltr"><div><div>I had a similar need.  But instead of connecting to an external database from within RT, I put together 2 scripts to check for content change and dump and load my custom fields in cron.  In my case, I was pulling time sheet codes which are:<br>
</div>client_project and task_code.  Each client_project has specific task_codes so task_codes is dependent on client_project.  Mine is probably way more complicated than you need and could be done easier in perl.  I'm a bash man at heart so here is my method.  They could be run from one script as long as the server has access to get to both databases.  Since custom fields are added to transactions as the actual field values (and not relational by id's) this was the best way foe me to get this done.  During the day if the finance department adds or removes codes, within an hour the RT system is updated.  Also in my case, client_project and task_code are each concatenated from 4 fields in my original search (fields 1 and 2 make up client_project and fields 3 and 4 make up task_code). Hope this helps in some way and apologies for the long message...<br>
<br></div>The first script is run on the external server and creates a load file.  This script is run every hour between 8am and 5pm from cron.<br><div><div><div><div class="gmail_extra"><br>#!/bin/bash<br>NEWFILE=/tmp/codes.txt<br>
OLDFILE=/tmp/codes.last<br>/bin/mv $NEWFILE $OLDFILE<br>/usr/bin/psql -A -t -c "select field1,field2 from table where criteria like 'your_criteria' -U postgres_user databasename >$NEWFILE<br>if /usr/bin/diff $NEWFILE $OLDFILE >/dev/null ; then<br>
echo "NoChanges" >/tmp/codes.status<br>else<br>echo "Changes" >/tmp/codes.status<br>fi<br><div class="gmail_quote"><br></div><div class="gmail_quote">Then on another server, I look at the codes.status file and check for changes.  If there are, I pull over the file and dump and load the customfieldvalues table where the customfield is in my case 1 and 2.  This script is run 5 minutes after the other one.<br>
</div><br>#!/bin/bash<br>HOME=/path/to/scripts<br>STATUSFILE=/tmp/codes.status<br>LOADFILE=/tmp/codes.txt<br>LASTFILE=/tmp/codes.txt<br>LOGFILE=$HOME/codes.log<br>PGSERVER=RT_PGSERVERNAME_REDACTED<br>PGUSER=RT_USER_REDACTED<br>
PGDB=RT_DBNAME_REDACTED<br>TODAY=`date +%Y-%m-%d-%H:%M:%S`<br>echo "Starting script at $TODAY"<br># Start logging<br>exec > >(tee $LOGFILE)<br>exec 2>&1<br><br>#Fetch status file<br>scp root@EXT_SERVERNAME_REDACTED:$STATUSFILE /tmp/<br>
STATUS=`cat $STATUSFILE`<br>echo $STATUS > $LOGFILE<br>if [ $STATUS == "Changes" ] ; then<br>echo "Making Changes">> $LOGFILE<br><br># Fetch update file<br>scp root@EXT_SERVERNAME_REDACTED:$LOADFILE /tmp/<br>
<br># Clean up previous sql load files and remove the old custom fields<br>rm -f $HOME/client_project.*<br>rm -f $HOME/task_code.*<br>rm -f $HOME/sequence.tmp<br>mv $HOME/client_project_backup $HOME/client_project_backup-$TODAY<br>
psql -A -t -c "select * from customfieldvalues where customfield='1'" -h $PGSERVER -U $PGUSER $PGDB >>$HOME/client_project_backup<br>psql -A -t -c "select * from customfieldvalues where customfield='2'" -h $PGSERVER -U $PGUSER $PGDB >>$HOME/task_code_backup<br>
psql -A -c "delete from customfieldvalues where customfield='1'" -h $PGSERVER -U $PGUSER $PGDB<br>psql -A -c "delete from customfieldvalues where customfield='2'" -h $PGSERVER -U $PGUSER $PGDB<br>
# Add a placeholder to notify users that update is taking place<br>psql -A -c "insert into customfieldvalues  (customfield,name,creator,created) values ('1','Tasks are being updated. Refresh in 2-5 minutes','22',now())" -h $PGSERVER -U $PGUSER $PGDB<br>
<br># Start numbering<br>echo "5" >$HOME/sequence.tmp<br><br># Parse through load file and capture variables to populate Client/Project field<br>OIFS=$IFS<br>IFS='<br>'<br>for m in `cat $LOADFILE`<br>
do<br>CLIENT=`echo $m|cut -d"|" -f1`<br>PROJECT=`echo $m|cut -d"|" -f2`<br>CLIENTPROJECT="${CLIENT}[${PROJECT}]"<br>echo "$CLIENTPROJECT" >>$HOME/client_project.tmp<br>done<br>
<br># Get Unique Client Project Codes to load to database<br>cat $HOME/client_project.tmp |sort -u >> $HOME/client_project.txt<br>OIFS=$IFS<br>IFS='<br>'<br>for c in `cat $HOME/client_project.txt`<br>do<br>NAME=`echo $c |cut -d"|" -f1`<br>
# Send load file info to SQL file for troubleshooting, then update the database with the new Client Project Values<br>echo "psql -A -c \"insert into customfieldvalues (customfield,name,creator,created) values ('1','$c','22',now())\" -h $PGSERVER -U $PGUSER $PGDB" >>$HOME/client_project.sql<br>
psql -A -c "insert into customfieldvalues (customfield,name,creator,created) values ('1','$c','22',now())" -h $PGSERVER -U $PGUSER $PGDB<br><br>#Increment sequence file for sorting in the Web GUI<br>
sequence=`tail -n1 $HOME/sequence.tmp`<br>SEQUENCE=`expr $sequence + 5`<br>CLEANNAME=`echo $NAME |sed -e 's/\[/\|/g; s/\]//g'`<br><br># Using the formatted Client/Project codes, loop through the loadfile and capture Task codes for each Client/Project code<br>
OIFS=$IFS<br>IFS='<br>'<br>for task in `cat $LOADFILE|grep $CLEANNAME`<br>do<br>TASK=`echo $task|cut -d"|" -f3`<br>CODE=`echo $task|cut -d"|" -f4`<br>CLIENT=`echo $task|cut -d"|" -f1`<br>
PROJECT=`echo $task|cut -d"|" -f2`<br>CLIENTPROJECT="${CLIENT}[${PROJECT}]"<br>TASKCODE="${TASK}[${CODE}]"<br>echo "psql -A -c \"insert into customfieldvalues (customfield,name,creator,created,category,sortorder) values ('2','$TASKCODE','22',now(),'$CLIENTPROJECT','$SEQUENCE')\" -h $PGSERVER -U $PGUSER $PGDB" >>$HOME/task_code.sql<br>
psql -A -c "insert into customfieldvalues (customfield,name,creator,created,category,sortorder) values ('2','$TASKCODE','22',now(),'$CLIENTPROJECT','$SEQUENCE')" -h $PGSERVER -U $PGUSER $PGDB<br>
echo $SEQUENCE >$HOME/sequence.tmp<br>done<br>done<br>psql -A -c "delete from customfieldvalues where name='Tasks are being updated. Refresh in 2-5 minutes'" -h $PGSERVER -U $PGUSER $PGDB<br>echo "Complete" >>$LOGFILE<br>
else<br>echo "No Changes">>$LOGFILE<br>fi<br></div></div></div></div></div>