Hi Dave, The problem here is that a TR value van be NULL, but is still part of the transaction.
All fields not part of the transaction will also have a TR value of NULL. The statement "Only new or changed field values are part of a transaction." is wrong. TR-values can be set in a number of other ways, where the TR value and DB value are the same: - Modify-All - Push-Fields - Set-fields-filter that sets a field to the same value as in the DB - Other API-programs These two ways of checking for a change has the same effect, but I prefer the first one: ('Field' != 'DB.Field' AND 'Field' != $NULL$) ('TR.Field' != 'DB.Field' AND 'TR.Field' != $NULL$) If you want to track a change that includes a change to NULL, there is only one (simple) way of doing it: ('Field' != 'DB.Field) Best Regards - Misi, RRR AB, http://www.rrr.se Products from RRR Scandinavia: * RRR|License - Not enough Remedy licenses? Save money by optimizing. * RRR|Log - Performance issues or elusive bugs? Analyze your Remedy logs. * RRR|Translator - Manage and automate your language translations. Find these products, and many free tools and utilities, at http://rrr.se. > Esser, > > TR indeed have some usefulness. Following is taken straight from page 36 > of > "Work-Flow Objects-700.pdf" We have a few filters that need to fire ONLY > if > that particular value is changed in a given transaction and it fires as > intended and doesn't fire when it shouldn't. It works fine for me. > > > For filters, you can specify whether the qualification is to reference > field > values in the transaction only, in the database only, or in both: > To check the value for the transaction only, enter the field name as > 'TR.<field>' (for example, 'TR.Submitter'). > To check the value in the database only, enter the field name as > 'DB.<field>' > (for example, 'DB.Submitter'). > To check the value for the transaction first and then check the database > if > a new value is not found in the transaction, enter the field name with no > prefix. > Only new or changed field values are part of a transaction. > The TR and DB prefixes work only in filter Run If qualifications. > > If we do 'Field' != DB.Field and if the value is not changed in a > transaction, it'll always be false (according to the guidelines from BMC > above) and we should be usingTR.Field != $NULL$, shouldn't we?? At least > that was my understanding and I'm still new to ARS. > > Thank you, > > Dave. > > > Thad K Esser wrote: >> >> Misi, >> >> I respectfully (and adamantly) disagree with your comment: "I think that >> the TR-values can have a legitimate use sometimes. Either for the reason >> of performance, or the reason of simplifying your run-ifs". >> >> Using a TR value does NOT simplify your Run-Ifs, it actually makes them >> more complicated and trickier to understand. I used to use a sig file >> of: >> "Perfection is achieved, not when there is nothing more to add, >> but when there is nothing left to take away." - Antoine de >> Saint-Exupéry >> >> By using the TR value alone, accuracy is lost (too much has been taken >> away). In your three examples, you acknowledge as much: >> >> Example 1: "It does not matter much if this filter sometimes run when >> it >> is not really necessary." >> If we are using TR values to improve performance, shouldn't we >> strive to eliminate unnecessary actions? >> >> Example 2: "...an extra notification is sent, but does no real damage. >> What if someone is going to order a server based on this email. >> Or >> call the help desk and rant that they already did this approval. Its >> very >> much situational as to what damage is done by an extra notification, but >> again, if performance is the goal, this fails. >> >> Example 3: "Extra controls may happen, but does not affect things >> much." >> Not much. People love it when computers do random things. >> (yes, >> this is tongue in cheek, call it pre-friday humor) >> >> Anyway, I just don't see performance as a valid issue for using a TR >> value. >> >> Thad Esser >> Remedy Developer >> "Argue for your limitations, and sure enough, they're yours."-- Richard >> Bach >> >> >> >> "Misi Mladoniczky" <[EMAIL PROTECTED]> >> Sent by: "Action Request System discussion list(ARSList)" >> <arslist@ARSLIST.ORG> >> 10/04/2007 03:31 AM >> Please respond to >> arslist@ARSLIST.ORG >> >> >> To >> arslist@ARSLIST.ORG >> cc >> >> Subject >> Re: Filter Problem >> >> >> >> >> >> >> Hi, >> >> You are correct in the assumption that TR-values can save a little bit >> on >> performance. >> >> The server looks through the run-if-qualification of all filters. >> >> If anywhere there is a 'Field' or 'DB.Field', the server will need fetch >> these values from the database. And the values of all other fields of >> the >> form as well! >> >> If you only have 'TR.Field', static values or keywords. This fetch is >> not >> needed. >> >> Note that my test form has a lot of fields, and only two filters. One is >> disabled and one is enabled in the samples below: >> >> ('TR.Assigned To' != $NULL$) >> http://www.rrr.se/tmp/TestAssignedToTR.html >> >> ('Assigned To' != 'DB.Assigned To' AND 'Assigned To' != $NULL$) >> http://www.rrr.se/tmp/TestAssignedToDB.html >> >> All fields will be fetched as soon as you have one 'Field' or 'DB.Field' >> in your filters, so adding fields will do nothing to performance. >> >> I have noticed this behaviour in previous versions. The verion I am >> testing is version 7.0.1 patch 003. >> >> I think that the TR-values can have a legitimate use sometimes. Either >> for >> the reason of performance, or the reason of simplifying your run-ifs: >> >> Example 1: ('TR.CustID' != $NULL$) >> Your filter makes sure that the CustName is in sync with your CustID. It >> does not matter much if this filter sometimes run when it is not really >> neccessary. >> >> Example 2: ('TR.Assigned To' != $NULL$ AND 'TR.Assigned To' != $USER$) >> Your filter sends a notification to the assigned person. If the field >> has >> not really been changed, an extra notification is sent, but does no real >> damage. >> >> Example 3: ('TR.Status' != $NULL$) >> Your filter controls something or other connected with the status. Extra >> controls may happen, but does not affect things much. >> >> Best Regards - Misi, RRR AB, http://www.rrr.se >> >> Products from RRR Scandinavia: >> * RRR|License - Not enough Remedy licenses? Save money by optimizing. >> * RRR|Log - Performance issues or elusive bugs? Analyze your Remedy >> logs. >> * RRR|Translator - Manage and automate your language translations. >> Find these products, and many free tools and utilities, at >> http://rrr.se. >> >>> While the TR is confusing isn't there a performance benefit? If I >> remember >>> correctly a TR check will not run a query against the database (I >> haven't >>> actually logged it to verify). >>> >>> Say you run a daily import of 500k employees (the requirement is to do >> it >>> during the business hours for whatever reason) and are looking to see >>> if >>> their employment status has changed, if so create a request to take >>> action. >>> >>> The import will perform an initial query the DB to find the existing >>> record >>> to update but then you have a filter that runs if 'EMP_Status' != >>> 'DB.EMP_Status' (a required field). Wouldn't that cause an additional >>> query >>> on the database to retrieve the record you just retrieved? Using >>> 'EMP_Status' != 'TR.EMP_Status' would check the server's memory if the >>> value >>> has changed and eliminate a redundant trip to the DB. In this case >>> using >> a >>> TR would eliminate 500k less queries to the database. During business >>> hours >>> that may be a huge savings (so I added the business hours part to help >> my >>> example). >>> >>> Is my scenario correct? >>> >>> Jason >>> >>> -----Original Message----- >>> From: Action Request System discussion list(ARSList) >>> [mailto:[EMAIL PROTECTED] On Behalf Of Rabi Tripathi >>> Sent: Wednesday, October 03, 2007 6:09 PM >>> To: arslist@ARSLIST.ORG >>> Subject: Re: Filter Problem >>> >>> Thad, I'm glad there's at least one person in the >>> world who has settled on the same rule regarding use >>> of TR values. Don't! >>> >>> Cause it's not necessary. There's no qualification you >>> can't build without using TR. It's nothing but >>> trouble. >>> >>> TR values tend to confuse people, as is evident from >>> this thread. Even if you completely understand the >>> nuances, there are many instances (many ways data can >>> change) in which TR value will not be what you think. >>> >>> TR values give you what you expect only if the update >>> is being done in Remedy user from a record that is "on >>> display". If the update is being done from a dialog >>> (common in ITSM 6), or if workflow is doing a query to >>> get values and then pushing it back, use of TR values >>> will drive you crazy. Why do you want to be driven >>> crazy, I ask. There are enough opportunities to be >>> driven crazy other ways. >>> >>> It has been around 5 years since I stopped using TR >>> values. >>> >>> In with 'Field Name' != 'DB.Field Name' >>> >>> In with 'Field Name' != 'DB.Field Name' AND 'Field >>> Name'!= $NULL$ >>> >>> Out with 'TR.Field Name' = $NULL$ (which misses >>> blanking out of data anyway) >>> >>> --- Thad K Esser <[EMAIL PROTECTED]> wrote: >>> >>>> Also, it could have a value if the record update is >>>> the result of a push >>>> fields from somewhere else. One way to get a handle >>>> on this is to run a >>>> short SQL log and find the update statements. If a >>>> field is included in >>>> the SET clause, the "TR" concept applies, whatever >>>> the actual value. >>>> >>>> My two rules for TR and DB values: >>>> 1. Don't use TR values (DB values are >>>> useful & good). >>>> 2. If you need to use a TR value, see rule >>>> #1. >>>> >>>> Thad Esser >>>> Remedy Developer >>>> "Argue for your limitations, and sure enough, >>>> they're yours."-- Richard >>>> Bach >>>> >>>> >>>> >>>> "Mayfield, Andy L." <[EMAIL PROTECTED]> >>>> Sent by: "Action Request System discussion >>>> list(ARSList)" >>>> <arslist@ARSLIST.ORG> >>>> 10/03/2007 07:55 AM >>>> Please respond to >>>> arslist@ARSLIST.ORG >>>> >>>> >>>> To >>>> arslist@ARSLIST.ORG >>>> cc >>>> >>>> Subject >>>> Re: Filter Problem >>>> >>>> >>>> >>>> >>>> >>>> >>>> OK, I think after a few cups of coffee I am now able >>>> to comprehend this. >>>> >>>> TR.Field != $NULL$ should fire anytime the field is >>>> changed, unless it >>>> is actually set to NULL. >>>> >>>> That is rather confusing to simple minded folk such >>>> as myself (-: >>>> >>>> Andy L. Mayfield >>>> Sr. System Operation Specialist >>>> Alabama Power Company >>>> Office: 8-226-1805 >>>> >>>> >>>> -----Original Message----- >>>> From: Action Request System discussion list(ARSList) >>>> [mailto:[EMAIL PROTECTED] On Behalf Of Shellman, >>>> David >>>> Sent: Wednesday, October 03, 2007 9:16 AM >>>> To: arslist@ARSLIST.ORG >>>> Subject: Re: Filter Problem >>>> >>>> Andy, >>>> >>>> As Axton said TR.field really is the value of the >>>> transaction. >>>> >>>> If a field doesn't change then the TR.field is null. >>>> There isn't a >>>> transaction because the DB.field and field are the >>>> same. >>>> >>>> If a field changes TR.field evaluates to what was >>>> just entered. So if >>>> you change a field from Hello World to Good Morning, >>>> TR.field will >>>> evaluate to Good Morning, DB.field evaluates to >>>> Hello World, and the >>>> field evaluates to Good Morning. >>>> >>>> The tricky one is where the field was Hello World >>>> but is now set to >>>> NULL. The DB.field is Hello World and the field >>>> value is NULL. Because >>>> there is a change there is a transaction but the >>>> TR.field evaluates to >>>> NULL because the field is actually set to NULL. >>>> >>>> Dave >>>> >>>> -----Original Message----- >>>> From: Action Request System discussion list(ARSList) >>>> [mailto:[EMAIL PROTECTED] On Behalf Of Mayfield, >>>> Andy L. >>>> Sent: Wednesday, October 03, 2007 10:06 AM >>>> To: arslist@ARSLIST.ORG >>>> Subject: Re: Filter Problem >>>> >>>> I thought everyone was saying that if I set a field >>>> to NULL (that >>>> previously had a value), the TR value would NOT be >>>> NULL? >>>> >>>> I am getting confused. I may need to take a break >>>> for coffee and a >>>> cigarette to clear my head (-: >>>> >>>> >Andy L. Mayfield >>>> Sr. System Operation Specialist >>>> >Alabama Power Company >>>> Office: 8-226-1805 >>>> >>>> >>>> -----Original Message----- >>>> From: Action Request System discussion list(ARSList) >>>> [mailto:[EMAIL PROTECTED] On Behalf Of Axton >>>> Sent: Wednesday, October 03, 2007 8:41 AM >>>> To: arslist@ARSLIST.ORG >>>> Subject: Re: Filter Problem >>>> >>>> This one that probably often trips people up; if you >>>> set the field to >>>> null, the TR value will be null. >>>> >>>> The TR value represent the current transactions >>>> value, if no change >>>> occurred in the transaction, then the TR value is >>>> null >>>> >>>> The DB value represents what was last committed to >>>> the database; prior >>>> to the current transaction >>>> >>>> The value represents the current value, regardless >>>> of the TR or DB >>>> values >>>> >>>> Axton Grams >>>> >>>> On 10/3/07, Mayfield, Andy L. >>>> <[EMAIL PROTECTED]> wrote: >>>> > ** >>>> > >>>> > >>>> > >>>> > OK, I thought I had this figured. So if while >>>> modifying a ticket, you >>>> > change a field that previously had a value, to >>>> NULL (blank) then the >>>> TR >>>> > value is NOT NULL. >>>> > >>>> > >>>> > >>>> > I need more coffee. >>>> > >>>> > >>>> > >>>> > >>>> > Andy L. Mayfield >>>> > Sr. System Operation Specialist >>>> > Alabama Power Company >>>> > Office: 8-226-1805 >>>> > >>>> > ________________________________ >>>> > >>>> > >>>> > From: Action Request System discussion >>>> list(ARSList) >>>> > [mailto:[EMAIL PROTECTED] On Behalf Of Joe >>>> D'Souza >>>> > Sent: Tuesday, October 02, 2007 10:57 PM >>>> > >>>> > To: arslist@ARSLIST.ORG >>>> > Subject: Re: Filter Problem >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > Yes the TR value is NULL if there is no >>>> modification even if there is >>>> a DB >>>> > value to that field.. >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > This is how it works.. when you are submitting a >>>> new record, and if >>>> there is >>>> > a value in the field, then the TR value is not >>>> NULL (obviously). The >>>> DB >>>> >>> === message truncated === >>> >>> >>> >>> >>> >> ____________________________________________________________________________ >>> ________ >>> Catch up on fall's hot new shows on Yahoo! TV. Watch previews, get >>> listings, >>> and more! >>> http://tv.yahoo.com/collections/3658 >>> >>> >> ____________________________________________________________________________ >>> ___ >>> UNSUBSCRIBE or access ARSlist Archives at www.arslist.org >>> ARSlist:"Where >>> the >>> Answers Are" >>> >>> >> _______________________________________________________________________________ >>> UNSUBSCRIBE or access ARSlist Archives at www.arslist.org >>> ARSlist:"Where >>> the Answers Are" >>> >> >> _______________________________________________________________________________ >> UNSUBSCRIBE or access ARSlist Archives at www.arslist.org ARSlist:"Where >> the Answers Are" >> >> >> >> ***IMPORTANT NOTICE: This communication, including any attachment, >> contains information that may be confidential or privileged, and is >> intended solely for the entity or individual to whom it is addressed. >> If >> you are not the intended recipient, you should delete this message and >> are >> hereby notified that any disclosure, copying, or distribution of this >> message is strictly prohibited. Nothing in this email, including any >> attachment, is intended to be a legally binding signature.*** >> >> _______________________________________________________________________________ >> UNSUBSCRIBE or access ARSlist Archives at www.arslist.org ARSlist:"Where >> the Answers Are" >> >> > > -- > View this message in context: > http://www.nabble.com/Filter-Problem-tf4558880.html#a13047946 > Sent from the ARS (Action Request System) mailing list archive at > Nabble.com. > > _______________________________________________________________________________ > UNSUBSCRIBE or access ARSlist Archives at www.arslist.org ARSlist:"Where > the Answers Are" > _______________________________________________________________________________ UNSUBSCRIBE or access ARSlist Archives at www.arslist.org ARSlist:"Where the Answers Are"