<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Soliant Consulting</title>
	<atom:link href="http://www.soliantconsulting.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.soliantconsulting.com/blog</link>
	<description>Soliant Consulting</description>
	<pubDate>Thu, 18 Feb 2010 21:11:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Shifting Columns in Cross Tab Reports</title>
		<link>http://www.soliantconsulting.com/blog/2010/02/shifting-columns-in-cross-tab-reports/</link>
		<comments>http://www.soliantconsulting.com/blog/2010/02/shifting-columns-in-cross-tab-reports/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 21:11:23 +0000</pubDate>
		<dc:creator>rjacques</dc:creator>
		
		<category><![CDATA[FileMaker]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1161</guid>
		<description><![CDATA[One of the 2009 Devcon presentations that I enjoyed the most was a session where John Sindelar presented the concept of using unstored calculated repeating fields to simplify code. The basic concept is that the calculation engine fires once for each repetition in a repeating calculated field, and through use of the Get(CalculationRepetitionNumber) function, you [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>One of the 2009 Devcon presentations that I enjoyed the most was a session where John Sindelar presented the concept of using unstored calculated repeating fields to simplify code. The basic concept is that the calculation engine fires once for each repetition in a repeating calculated field, and through use of the Get(CalculationRepetitionNumber) function, you can have each repetition do something unique when it evaluated.</p>
<p>A very handy use of this is for cross tab reports, where each repetition can pull in data from a different table occurrence. The end result is that a cross tab report can be generated with a fraction of the fields that it would take to do this with separate calc fields for each cell.</p>
<p>Say, for example, that you have a cross tab report that shows categories running across the top of the report, and states running down the left, like this:<br />
<img src="http://www.soliantconsulting.com/blog/wp-content/uploads/2009/12/crosstab_example.png" alt="Cross Tab Example" /></p>
<p>In this example, the rows of categories are actually a repeating field that is displaying all its repetitions on the layout in a horizontal format. The calculation defined within the repeating field is simple:</p>
<div class="codesnip-container" >Case(Get(CalculationRepetitionNumber) = 1; CategoryTO_01::CategoryField:<br />
Get(CalculationRepetitionNumber) = 2; CategoryTO_02::CategoryField:<br />
Get(CalculationRepetitionNumber) = 3; CategoryTO_03::CategoryField:<br />
Get(CalculationRepetitionNumber) = 4; CategoryTO_04::CategoryField:)</div>
<p>Every time the calc fires, it checks to see what repetition is it displaying, and pulls in data from the correct table occurrence.  In this way, a single field with N repetitions can be used to create a cross-tab display with N columns, rather than needing to have one field per column.  </p>
<p>In the course of using this technique, I&#8217;ve found additional ways in which one can accomplish things more easily than using the &#8220;one field per cell&#8221; method. An example of this would be shifting columns in a cross tab report to omit columns that are empty.</p>
<p>The example code above includes all categories (all columns) regardless of whether there is data or not to display. In order to omit empty columns, just a few extra steps are required.</p>
<p>First, you&#8217;ll need a list of all possible columns, in the order that they appear. This list needs to exist in the global space, so a global field or global variable is required. Your list of all columns looks something like this:</p>
<div class="codesnip-container" >Wallpaper<br />
Bath Accesories<br />
Bath Fixtures<br />
Bath Linen</div>
<p>You can hard code these values, or extract them with a script.</p>
<p>At this point you have a repeating field that displays all of the columns, regardless of whether or not they contain data, and you have a list of all columns, in the same order as the repetitions. Let&#8217;s call the repeating field &#8220;fullRepeatingField&#8221; and the list of column names &#8220;longList.&#8221;</p>
<p>Next, you need a list of columns that you wish to include in your final output. In other words, you need a list of columns that contain data. One way to do this is to do a &#8220;Count()&#8221; through each of the TOs that pull in data for the repeating field. Let&#8217;s call the list that holds the columns that we wish to include &#8220;shortList.&#8221; A calculation, in the form of Set Variable or Set Field,  in a looping script is a good way to extract these values, and the calc would look something like this:</p>
<div class="codesnip-container" >If(Count(CategoryTO_01::PrimaryKey);<br />
shortList&amp;GetValue(longList;1)&amp;&#8221;¶&#8221;;shortList)</div>
<p>This calculation says: &#8220;If there are any categories for the first column, add that column name to the list of columns that have data, otherwise, leave the list of columns that have data alone.&#8221;</p>
<p>The order of these values determines the order that the columns display (topmost category is the leftmost column). In fact, you can use this method to sort columns as well as remove empty columns.</p>
<p>The final piece that you need is to create another unstored repeating calculation field to display the categories that have data. The calculation for this repeating field is the heart of the technique:</p>
<div class="codesnip-container" >Let([vThisCategory = GetValue(shortList;GetCalculationRepetitionNumber);<br />
// #1vPositionInFullDataSet = fnGetValuePosition(longList;vThisCategory)//<br />
#2];fullRepeatingField[vPositionInFullDataSet] //#3)</div>
<p>Comments:<br />
#1: The variable vThisCategory pulls in the name of the category that we want to show in this repetition. The first value goes into the first repetition, the second value goes into the second repetition, etc. In our example, if FileMaker is displaying the first repetition, this variable holds the text &#8220;Wallpaper&#8221;<br />
#2: We need to know which repetition in the full dataset to find the value we need, that position is equivalent to the position of the category name in longList (because we set it up that way when we created longList.) Note that there is a call to a custom function &#8220;fnGetValuePosition;&#8221; you can find a similar custom function here:<br />
&lt;A href=&#8221;http://www.briandunning.com/cf/62&#8243;&gt;http://www.briandunning.com/cf/62&lt;/A&gt;<br />
If you don&#8217;t have FileMaker Advanced, you can copy the code of the custom function into the calculation dialog. It&#8217;s essentially just a text parsing exercise.<br />
#3: The last part is to pull the correct value out of the repeating field that hold all of the values. The repeating field notation makes this very easy, once we know which repetition that we want.</p>
<p>This article shows how to reduce the number of fields needed to create a cross-tab report, then how to manipulate &#8220;columns&#8221; in repeating fields by comparing two lists. I hope you find it useful!</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2010/02/shifting-columns-in-cross-tab-reports/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP&#8217;s max_execution_time different on Windows and Linux</title>
		<link>http://www.soliantconsulting.com/blog/2010/02/phps-max_execution_time-different-on-windows-and-linux/</link>
		<comments>http://www.soliantconsulting.com/blog/2010/02/phps-max_execution_time-different-on-windows-and-linux/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 21:13:21 +0000</pubDate>
		<dc:creator>tandrews</dc:creator>
		
		<category><![CDATA[PHP/Web]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1182</guid>
		<description><![CDATA[On Windows, the PHP INI variable, &#8220;max_execution_time,&#8221; is the maximum clock time between when the PHP process starts and when it finishes.
On Linux and OS X, the same variable represents the maximum CPU time that the PHP process can take.  CPU time is less than clock time because processes on Linux (and OS X) contend [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/04/simplify-fmsadmin-from-windows-cmd-prompt/' rel='bookmark' title='Permanent Link: Simplify fmsadmin from Windows cmd prompt'>Simplify fmsadmin from Windows cmd prompt</a> <small>On an email thread I was participating in today, Caleb...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/07/use-new-windows-to-preserve-state/' rel='bookmark' title='Permanent Link: Use New Windows to Preserve State'>Use New Windows to Preserve State</a> <small>One of our collective pet-peeves at Soliant is when a...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>On Windows, the PHP INI variable, &#8220;max_execution_time,&#8221; is the maximum clock time between when the PHP process starts and when it finishes.</p>
<p>On Linux and OS X, the same variable represents the maximum CPU time that the PHP process can take.  CPU time is less than clock time because processes on Linux (and OS X) contend for CPU time, and sometimes sit idle.</p>
<p>For example, if you have a PHP program which makes a request to a web service, like FileMaker&#8217;s Custom Web Publishing, on Linux, the time the PHP program waits for a response is not counted, while on Windows, it does.</p>
<p>You can see this by running the script:</p>
<blockquote><pre>&lt;?php

    set_time_limit(15); /* Sets max_execution_time */
    sleep(30); /* Wait thirty seconds */
    echo "Hello World!\n";

?&gt;</pre>
</blockquote>
<p>If you run this on Windows, it will fail with an error message, but on Linux or OS X, the time spent sleeping is time the process is &#8220;idle,&#8221; so the execution time is considered to be almost zero.</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/04/simplify-fmsadmin-from-windows-cmd-prompt/' rel='bookmark' title='Permanent Link: Simplify fmsadmin from Windows cmd prompt'>Simplify fmsadmin from Windows cmd prompt</a> <small>On an email thread I was participating in today, Caleb...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/07/use-new-windows-to-preserve-state/' rel='bookmark' title='Permanent Link: Use New Windows to Preserve State'>Use New Windows to Preserve State</a> <small>One of our collective pet-peeves at Soliant is when a...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2010/02/phps-max_execution_time-different-on-windows-and-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Facebook unveils PHP compiler, HipHop</title>
		<link>http://www.soliantconsulting.com/blog/2010/02/facebook-unveils-php-compiler-hiphop/</link>
		<comments>http://www.soliantconsulting.com/blog/2010/02/facebook-unveils-php-compiler-hiphop/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 14:18:19 +0000</pubDate>
		<dc:creator>tandrews</dc:creator>
		
		<category><![CDATA[PHP/Web]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1180</guid>
		<description><![CDATA[Yesterday, Facebook announced a new PHP runtime technology, HipHop, which allows PHP applications to run significantly faster.


No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Yesterday, Facebook announced a new PHP runtime technology, <a title="http://developers.facebook.com/news.php?blog%C7%A9&amp;story%E0%BD%9D8" href="http://" target="_blank">HipHop</a>, which allows PHP applications to run significantly faster.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2010/02/facebook-unveils-php-compiler-hiphop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>No Brown M&#38;M’s</title>
		<link>http://www.soliantconsulting.com/blog/2009/11/no-brown-mm%e2%80%99s/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/11/no-brown-mm%e2%80%99s/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 18:43:13 +0000</pubDate>
		<dc:creator>mburns</dc:creator>
		
		<category><![CDATA[Planning is Everything]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1157</guid>
		<description><![CDATA[Have you ever heard the urban legend about Van Halen’s contract rider that stated that the concert promoter must provide a large bowl of M&#38;M’s in the band’s dressing room with all the brown M&#38;M’s removed?
It’s true!
And for years I found myself at odds with the attitudes of my rock heroes. (I’m a closet ’80s [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Have you ever heard the urban legend about Van Halen’s contract rider that stated that the concert promoter must provide a large bowl of M&amp;M’s in the band’s dressing room with all the brown M&amp;M’s removed?</p>
<p>It’s true!</p>
<p>And for years I found myself at odds with the attitudes of my rock heroes. (I’m a closet ’80s hair-band fan.) Can you imagine the poor sap whose job it was to comb through the hundreds of M&amp;M’s - by color?</p>
<p>The nerve of these pampered, self-centered, narcissistic minstrels who had somewhere along the path bought into the myth invented by Warner Bros. Records marketing team!  I don’t care how many stadiums you can sell out, you are never cool enough to demand “no Brown M&amp;M’s”!  (Darn Kids.  Get off my lawn!)</p>
<p>However, recently I got a fresh perspective on the purpose of a rock concert contract rider and the way Van Halen was using it.</p>
<p>The contract rider describes in great detail the set up and tear down of the band’s sets and in a very real way describes the day-to-day existence of the band on the road.   Van Halen was the first band to bring big stadium shows out to the fans in small markets.  The band knew which places had a high likelihood of being potentially dangerous for the crew, the fans, or themselves.   They were aware of dangers like substandard construction of the concert venue, lax or under-skilled local contractors who were in charge of lighting, sound, or staging and poor organization among the public relations or security staff.</p>
<p>The band knew that in many cases, they had a better idea of how to put on an exciting and safe show than the people they hired in these small markets.  As a safety check, they filled their contract rider with extremely specific instructions for how the promoter needed to run the show.  But they couldn’t ensure that the promoter actually read and followed the rider. They had to take the promoters word for it that all instructions were followed to the letter.</p>
<p>That was until they came up with the idea of the bowl of M&amp;M’s.  The one that was to be placed in the dressing room, the one that was to have all the brown M&amp;M’s removed.  The band could take one look at that bowl and know instantly if the local promoter had or had not closely read and followed the instructions in the rider.</p>
<p>If they saw a single brown M&amp;M they knew to line-check each and every part of the set up thoroughly.   Did the promoter hire enough competent security guards?  Did the lighting techs tighten down the clamps that hold the 100 lb lights suspended over the heads of the band?   Did the sound engineer bother to plug the guitars into the amps?   The Brown M&amp;M’s clause in the rider created a trigger that let the band know what type of risk mitigation activities to begin once arriving on scene.</p>
<p>Triggers are one of the most useful tools a team of software engineers can pull out of their project toolbox.</p>
<p>Triggers, in the world of software development, are signposts along the project development path. They help answer the question, “Are the conditions such that my risks have now been elevated to issues?”<br />
A Risk is a condition inherent on all projects; it is a thing that has the potential to become an Issue.  An Issue is a problem that must be dealt with by members of the project team if they intend to deliver the project within the metrics of budget, timeline, and the client’s conditions of acceptance.</p>
<p>We track risks. We mitigate issues. But simply identifying and prioritizing risks by their likelihood and severity is not enough. Being able to identify WHEN a risk is evolving into an issue can save the project team a lot of painful rework and the client unnecessary heartburn.  It is important that when the project team is identifying risks they are also outlining the triggers and corresponding activities to undertake to either prevent the risk from becoming an issue or lessen the impact should an issue materialize.</p>
<p>Anyone on the project team can (and should) help with this but I feel it falls to the Project Manager to “own” this part of the project lifecycle.</p>
<p>And Project Managers should take a lesson from Van Halen’s candy dish.</p>
<ul>
<li> Work to find triggers that are easily identifiable and are not dependant on a lot of other factors. (Either the Brown M&amp;M’s are present or they are not).</li>
<li> Keep your list of triggers close to you. (The dressing room in this case is the spot where the band got ready to work. Have the list easily accessible, refer to it, and update it frequently.)</li>
<li> Be ready to demand unpopular actions from your project team when you notice a trigger is activating.  (Van Halen would demand that the lighting engineers recheck all the stage lights if the Brown M&amp;M’s were not removed. The PM should be ready to tell the project team they have to: recheck their code, re-estimate their task list, even re-architect their solution. )</li>
</ul>
<p>Van Halen was OK with being known as a bunch of pampered rockstars because it was better than being known for concerts like the Rolling Stones 1969 Altamont concert where security was provided by the local chapter of the Hell’s Angels and one fan was fatally shot.  Or the Who’s 1979 Cincinnati concert where 11 fans were trampled to death in a mad rush to get the best seats in the “open” venue.</p>
<p>As a Project Manager, become OK with the role of gadfly, understand it is your job and your responsibility to initiate the discussion of “what could go wrong.”  Then document the triggers and the mitigation strategies.  Keep a watchful eye on them and be prepared to act.  When the project delivers successfully, you get to enjoy that bowl of M&amp;M’s - even the brown ones.</p>
<p>http://www.snopes.com/music/artists/vanhalen.asp</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/11/no-brown-mm%e2%80%99s/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Setting Lead Assignment Rules with Apex</title>
		<link>http://www.soliantconsulting.com/blog/2009/11/setting-lead-assignment-rules-with-apex/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/11/setting-lead-assignment-rules-with-apex/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 01:35:47 +0000</pubDate>
		<dc:creator>tburre</dc:creator>
		
		<category><![CDATA[News]]></category>

		<category><![CDATA[Salesforce]]></category>

		<category><![CDATA[Apex]]></category>

		<category><![CDATA[Assignment Rules]]></category>

		<category><![CDATA[Lead]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1150</guid>
		<description><![CDATA[If you want to create a new Lead via Visualforce or web form with Apex it&#8217;s very possible you could overlook the Assignment Rules.  As you might know, it&#8217;s not even always obvious on the native Lead creation layout.  Notice the lower left corner checkbox in the screenshot below.






To enforce Assignment Rules in Apex you&#8217;ll [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/07/how-to-avoid-governor-limits-with-sendemail-in-apex/' rel='bookmark' title='Permanent Link: How to avoid governor limits with sendEmail in Apex'>How to avoid governor limits with sendEmail in Apex</a> <small>You can send emails programmatically in Apex, but if you&#8217;re...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/07/the-user-visualforce-and-apex-about-a-drop-down-menu/' rel='bookmark' title='Permanent Link: The User, Visualforce and Apex &#8212; about a drop down menu'>The User, Visualforce and Apex &#8212; about a drop down menu</a> <small>Let&#8217;s say you coded a custom view or report using...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>If you want to create a new Lead via Visualforce or web form with Apex it&#8217;s very possible you could overlook the Assignment Rules.  As you might know, it&#8217;s not even always obvious on the native Lead creation layout.  Notice the lower left corner checkbox in the screenshot below.</p>
<div class="mceTemp">
<dl>
<dt><img class="size-full wp-image-1152" src="http://www.soliantconsulting.com/blog/wp-content/uploads/2009/11/assignrulepic-2.png" alt="native Lead layout snippet" width="348" height="155" /></dt>
<dd></dd>
</dl>
</div>
<p>To enforce Assignment Rules in Apex you&#8217;ll need to instantiate the Database.DMLOptions class, set the useDefaultRule property of assignmentRuleHeader to True, and finally call a native method on your Lead called setOptions, with the Database.DMLOptions instance as the argument.<br />
The code below demonstrates:</p>
<div class="codesnip-container" >// to turn the Assignment Rules on<br />
Database.DMLOptions dmo = new Database.DMLOptions();<br />
dmo.assignmentRuleHeader.useDefaultRule = true;<br />
theLead.setOptions(dmo);</div>
<p>That&#8217;s it.  Hope it helps.</p>
<p>Happy clouding ~~~</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/07/how-to-avoid-governor-limits-with-sendemail-in-apex/' rel='bookmark' title='Permanent Link: How to avoid governor limits with sendEmail in Apex'>How to avoid governor limits with sendEmail in Apex</a> <small>You can send emails programmatically in Apex, but if you&#8217;re...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/07/the-user-visualforce-and-apex-about-a-drop-down-menu/' rel='bookmark' title='Permanent Link: The User, Visualforce and Apex &#8212; about a drop down menu'>The User, Visualforce and Apex &#8212; about a drop down menu</a> <small>Let&#8217;s say you coded a custom view or report using...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/11/setting-lead-assignment-rules-with-apex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Making it easier for users to omit Inactive records in everyday finds</title>
		<link>http://www.soliantconsulting.com/blog/2009/11/making-it-easier-for-users-to-omit-inactive-records-in-everyday-finds/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/11/making-it-easier-for-users-to-omit-inactive-records-in-everyday-finds/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 20:01:35 +0000</pubDate>
		<dc:creator>jbelber</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<category><![CDATA[FileMaker]]></category>

		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1144</guid>
		<description><![CDATA[I&#8217;ve got lots of clients who use a single checkbox to mark a record Inactive, in lieu of deleting the record.  It&#8217;s quick and easy and clear.  But sooner or later, as Inactive records build up over time, most of them decide that they want to exclude all the Inactive records from the [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/10/when-fm-scripts-are-faster-than-php-for-custom-web-publishing/' rel='bookmark' title='Permanent Link: When FM Scripts Are Faster Than PHP for Custom Web Publishing'>When FM Scripts Are Faster Than PHP for Custom Web Publishing</a> <small>Often it&#8217;s best not to use FileMaker scripts to perform...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/access-filemaker-data/' rel='bookmark' title='Permanent Link: Access FileMaker Data'>Access FileMaker Data</a> <small> 1. FileMaker Server is very well documented. All the...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve got lots of clients who use a single checkbox to mark a record Inactive, in lieu of deleting the record.  It&#8217;s quick and easy and clear.  But sooner or later, as Inactive records build up over time, most of them decide that they want to exclude all the Inactive records from the finds they do &#8212; but not all the time, just most of the time.</p>
<p>The obvious solution if you&#8217;re a hardcore FileMaker user is a multi-request find that uses the Omit option. You make one request with the criteria you want, then re-enter find mode, check the Inactive box and the Omit option, and select Constrain Found Set.  But this can be intimidating to some users, and really, if I&#8217;m being totally honest with myself, I have to admit that it takes too many steps to be truly easy.   </p>
<p>I could use script-triggers to postprocess all finds run in that context, but that demands enough budget or a compelling reason to undertake that level of complexity and effort.  In the absence of either, you can offer an inexpensive solution by presenting the existing data differently, so that people can do a simple, positive find rather than a complex omit find.</p>
<p>Make a calculation field called Status, and code it to return &#8220;Inactive&#8221; if the box is checked, and to return &#8220;Active&#8221; if the box is unchecked.  Expose this new field to find mode, and you&#8217;re in business.  Now people can type in their find criteria as usual, including typing in &#8220;Active&#8221; in the Status calc field, hit the Enter key as they always do, and the single-request find will bring back only the records that meet the criteria AND have the Inactive box unchecked.</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/10/when-fm-scripts-are-faster-than-php-for-custom-web-publishing/' rel='bookmark' title='Permanent Link: When FM Scripts Are Faster Than PHP for Custom Web Publishing'>When FM Scripts Are Faster Than PHP for Custom Web Publishing</a> <small>Often it&#8217;s best not to use FileMaker scripts to perform...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/access-filemaker-data/' rel='bookmark' title='Permanent Link: Access FileMaker Data'>Access FileMaker Data</a> <small> 1. FileMaker Server is very well documented. All the...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/11/making-it-easier-for-users-to-omit-inactive-records-in-everyday-finds/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tables, table occurrences, and relationships</title>
		<link>http://www.soliantconsulting.com/blog/2009/11/tables_table_occurrences_relationships/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/11/tables_table_occurrences_relationships/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 16:47:27 +0000</pubDate>
		<dc:creator>bbarreto</dc:creator>
		
		<category><![CDATA[FileMaker]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1133</guid>
		<description><![CDATA[
Understanding the difference between a table and a table occurrence is vital when developing a relationships in a FileMaker solution.   If the Relationships Graph for your FileMaker solution never has more than one table occurrence per table, then it may not be important to understand the differences.  However, once you do understand the difference it [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/07/lose-a-layout-gain-a-function/' rel='bookmark' title='Permanent Link: Lose a Layout, Gain a Function'>Lose a Layout, Gain a Function</a> <small>There is a rather obscure but very useful feature available...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p><!--StartFragment--></p>
<p class="MsoNormal"><span>Understanding the difference between a table and a table occurrence is vital when developing a relationships in a FileMaker solution.   If the Relationships Graph for your FileMaker solution never has more than one table occurrence per table, then it may not be important to understand the differences.  However, once you do understand the difference it may help you to utilize relationships in FileMaker in ways you did not realize were possible.  To understand how tables, table occurrences, and relationships work together we must understand each one.</span></p>
<p>The best place to start is to first understand a table.  A table stores information about one specific kind of thing: for example, a given table may store information about vehicles, or swimmers, or scholarships. A table stores its data in a row-and-column format. Each row represents one instance of a thing: one vehicle, or one car, or one scholarship. These rows are often known as “records” in database terminology. The columns define the common data elements stored for each instance of a thing: a car’s weight and model year, or a scholarship’s amount. These columns are often called “fields” in database parlance. A table is thus the collection of these records and their field data. In FileMaker, tables are created in the Manage Database Dialog under the Tables tab. All database data in FileMaker is stored in tables.</p>
<p class="MsoNormal"><span><br />
A table <em>occurrence</em> is a visual representation of a given table in the Relationships Graph.  The best way to think of a table occurrence is as a window or point of view into the actual table. This window or viewpoint can be used to see and/or manipulate the data that resides in the table.  Layouts, for example, are based on a specific table occurrence and can access the data in the specific table occurrence or any data related to that table occurrence.  The use of these table occurrences will be easier to understand once we look at relationships.</span></p>
<p>Finally, what is a relationship?  A relationship is way of reaching data in one table based on the information that resides in the records of another table.  This is done by linking one or more fields in one table occurrence to one or more fields in another table. For example, you might link a customer ID on an Order record with a customer ID on a Customer record. That’s a way of saying “this order belongs to that customer.”  Another way to think about this is that relationships are a pre-specified query from one table occurrence to the next.  The relationship we just described, for example, would also allow you to find all orders for a given customer. By using these relationships we can report on data in other tables and also display their information through portals from the standpoint of the current table occurrence.</p>
<p>Now that the definitions are out of the way, why are these tools useful?  And why does FileMaker allow more than one table occurrence per table in the relationships graph?  If a relationship is like a pre-specified query into another table, there are times when we need to search for data in one table in multiple ways.  That is why we need table occurrences.</p>
<p>Imagine a straightforward Company-Contact Management System.  We may have the following tables: Company, Contact, Address.  The way these tables are related is as follows:<br />
- one Company can have multiple Contacts<br />
- one Company can have multiple Addresses<br />
- one Contact can belong to only one Company<br />
- one Contact can have multiple Addresses, and these addresses may not need to directly relate to that contact&#8217;s company</p>
<p class="MsoNormal"><span> </span></p>
<p class="MsoNormal"><span>We don’t need to create a table specifically for Contact Addresses and another for Company Address to implement this solution.  We can simply create one Address table and have it appear as two table occurrences:<br />
- Contact Address will be a table occurrence that is based on the Address table and directly relates to the Contact table occurrence<br />
- Company Address will be a table occurrence that is based on the Address table and directly relates to the Company table occurrence.</span></p>
<p class="MsoNormal"><span>Here’s how the Relationships Graph might look. Table occurrence with the same color are based on the same underlying table.</span></p>
<p class="MsoNormal" style="text-align: center;"><img class="size-full wp-image-1135 aligncenter" src="http://www.soliantconsulting.com/blog/wp-content/uploads/2009/11/relgraph1.png" alt="RelationshipGraphExample" width="432" height="39" /></p>
<p class="MsoNormal"><span>Why not just relate both Company and Contact to the same Address table occurrence?   FileMaker doesn&#8217;t allow for loops in the Relationships Graph. A loop would exist if there were ever more than one pathway between any two table occurrences. Since Company and Contact will need to be related to each other, by relating them to Address we would form a loop.  Now, why are loops forbidden?  Well, computers aren’t as smart as we are. A computer can only follow specific instructions.  Imagine that your computer is “standing on” the Company table occurrence and you tell it that you want to see the Address that belongs to a specific Contact.  Well, the computer sees that it is ”standing on” the Company table occurrence and that there are two ways to get from there to Address. One is by going directly to Address and the other is by going to Contact and then on to the Address.  Since both ways are valid the computer cannot decide which way to take on its own.  This is why we need table occurrences. By having multiple table occurrences that point to the same table, all we need to do is to tell the computer the specific table occurrence which we want to grab the data through (in the above Graph it would be Address1).  Then the computer can go to that specific table without any confusion. Between any two table occurrences in the Relationships Graph, there will only ever be one unique path</span></p>
<p>Through this example we can see how table occurrences are just a window or way to look into the table to see or manipulate data.  We can also see that relationships are just a way in which we direct FileMaker from a perspective on one table to a perspective on another table (a table occurrence can also be thought as a &#8220;perspective on a table&#8221;).</p>
<p>I hope this will help people understand the difference between tables, table occurrences, and relationships.  For a more in-depth understanding of these concepts, data modeling in general, and many more aspects of FileMaker I highly recommend taking the FileMaker Training Series: <a href="http://www.soliantconsulting.com/training">http://www.soliantconsulting.com/training</a></p>
<p><!--EndFragment--></p>
<p><!--EndFragment--></p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/07/lose-a-layout-gain-a-function/' rel='bookmark' title='Permanent Link: Lose a Layout, Gain a Function'>Lose a Layout, Gain a Function</a> <small>There is a rather obscure but very useful feature available...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/11/tables_table_occurrences_relationships/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FileMaker &#38; Snow Leopard (Mac OSX 10.6)</title>
		<link>http://www.soliantconsulting.com/blog/2009/10/filemaker-snow-leopard-mac-osx-106/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/10/filemaker-snow-leopard-mac-osx-106/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 18:05:21 +0000</pubDate>
		<dc:creator>agutleben</dc:creator>
		
		<category><![CDATA[FileMaker]]></category>

		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1127</guid>
		<description><![CDATA[Thinking of upgrading to OS X 10.6? Have you already upgraded? If you answered yes to either of the previous questions, then there are some things to be aware of. Take a moment and explore the links below.
Which versions of FileMaker are compatible with Snow Leopard?
Supported versions of FileMaker can be found here.
Are there any [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/how-to/get-filemaker-server-9/' rel='bookmark' title='Permanent Link: Get FileMaker Server 9'>Get FileMaker Server 9</a> <small>Note: FlexFM works with the following versions of FileMaker Server:...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/02/using-local-os-accounts-for-filemaker-external-authentication/' rel='bookmark' title='Permanent Link: Using local OS accounts for FileMaker External Authentication'>Using local OS accounts for FileMaker External Authentication</a> <small>FileMaker External Authentication (EA) is a very powerful feature that...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Thinking of upgrading to OS X 10.6? Have you already upgraded? If you answered yes to either of the previous questions, then there are some things to be aware of. Take a moment and explore the links below.</p>
<p><strong>Which versions of FileMaker are compatible with Snow Leopard?</strong><br />
<a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/std_adp.php?p_faqid=7359&amp;p_sid=dekEOtLj&amp;p_accessibility=0&amp;p_redirect=&amp;p_li=&amp;p_pv=&amp;p_cv=&amp;p_prods=%20&amp;p_cats=&amp;p_sp=cF9zZWFyY2hfdGV4dD1zbm93IGxlb3BhcmQmcF9zZWFyY2hfdHlwZT1hbnN3ZXJzLnNlYXJjaF9ubCZwX3NvcnRfYnk9&amp;p_topview=1">Supported versions of FileMaker can be found here.</a></p>
<p><strong>Are there any known issues?</strong><br />
The best way to keep on top if current issues regarding Snow Leopard and FileMaker is to search FileMaker&#8217;s knowledge base. There are also many resources online which feature some discussion around bugs that folks are seeing. A search from any major search engine will easily grab you the results you want. I did want to add some of the more noticeable bugs here:</p>
<p>1. <a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/std_adp.php?p_faqid=7337">Attempting to install FileMaker Pro 9 Advanced on a clean install of Mac OS X v10.6</a></p>
<p>2. <a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/popup_adp.php?p_faqid=7355&amp;p_created=1251208081&amp;p_sid=dekEOtLj&amp;p_lva=&amp;p_li=&amp;p_redirect=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTcsNTcmcF9wcm9kcz0gJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wc19hbnNfdXBkYXRlZD0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1zbm93IGxlb3BhcmQ*">Snow Leopard compatibility issues with FileMaker 9 and earlier versions</a></p>
<p>3. <a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/std_adp.php?p_faqid=7356">Exporting to the &#8220;.xls&#8221; format gives an error if Rosetta is not installed</a></p>
<p>4. <a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/std_adp.php?p_faqid=7354">Issue when attempting to open a FileMaker Pro file via Apple Script on Mac OSX v10.6</a></p>
<p>5. <a href="http://filemaker.custhelp.com/cgi-bin/filemaker.cfg/php/enduser/std_adp.php?p_faqid=7361">What do I need to know when installing FileMaker Server 10 and FileMaker Server 10 Advanced</a></p>
<p>I&#8217;m sure that more issues and resolutions will continue to be posted to FileMaker&#8217;s site, but I hope this helps make you aware of some the known bugs.</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/how-to/get-filemaker-server-9/' rel='bookmark' title='Permanent Link: Get FileMaker Server 9'>Get FileMaker Server 9</a> <small>Note: FlexFM works with the following versions of FileMaker Server:...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/02/using-local-os-accounts-for-filemaker-external-authentication/' rel='bookmark' title='Permanent Link: Using local OS accounts for FileMaker External Authentication'>Using local OS accounts for FileMaker External Authentication</a> <small>FileMaker External Authentication (EA) is a very powerful feature that...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/10/filemaker-snow-leopard-mac-osx-106/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SalesForce - Flash Builder Integration Announced</title>
		<link>http://www.soliantconsulting.com/blog/2009/10/salesforce-flash-builder-integration-announced/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/10/salesforce-flash-builder-integration-announced/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 23:50:07 +0000</pubDate>
		<dc:creator>charmer</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1123</guid>
		<description><![CDATA[Adobe and SalesForce have always worked well together.
They are complimentary technologies - Flash is primarily a display platform and SalesForce is more data focused.
Using Flex or Flash to present data from the SalesForce cloud is a great way to make a really seamless and slick user experience. This latest development makes that even easier than [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/how-to/get-flex-builder-2/' rel='bookmark' title='Permanent Link: Get Flex Builder 2'>Get Flex Builder 2</a> <small> 1. If you don&#8217;t already own Flex Builder, you...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/flex-builder-2-orientation/' rel='bookmark' title='Permanent Link: Flex Builder 2 Orientation'>Flex Builder 2 Orientation</a> <small> 1. By default, Flex Builder opens a Start Page...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/install-flexfm/' rel='bookmark' title='Permanent Link: Install FlexFM'>Install FlexFM</a> <small> 1. Download the FlexFM source code. While we may...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<h4>Adobe and SalesForce have always worked well together.</h4>
<p>They are complimentary technologies - Flash is primarily a display platform and SalesForce is more data focused.<br />
Using Flex or Flash to present data from the SalesForce cloud is a great way to make a really seamless and slick user experience. This latest development makes that even easier than it was previously.<br />
Go to <a href="http://developer.force.com/flashbuilder">this</a> page to find out more and download the IDE.</p>
<h4>New Capabilities</h4>
<p>Using the Flash or SFDC IDE tools previously enabled you to make either a Flash Builder project or a new SalesForce project.<br />
Now you can make a combined Flash Builder / SFDC project that uses a WSDL to enable you to connect to the SalesForce schema.<br />
You can also create an Adobe AIR app which manipulates offline data and synchs it when you are online again.</p>
<p>There is no guide on how to download the WSDL document from SF for use in the IDE - here&#8217;s what you do.</p>
<li>Click Setup | Develop | API.</li>
<li>Download the appropriate WSDL:</li>
<li>If you are downloading an enterprise WSDL and you have managed packages installed in your organization, click Generate Enterprise WSDL. Salesforce.com prompts you to select the version of each installed package to include in the generated WSDL.</li>
<li>Otherwise, right-click the link for the appropriate WSDL document to save it to a local directory. In the right-click menu, Internet Explorer users can choose Save Target As, while Mozilla Firefox users can choose Save Link As.</li>
<li>On your computer, import the local copy of the WSDL document into your development environment.</li>
<p>Another trick to remember is that you&#8217;ll need your API key to connect to SalesForce - it gets pasted on the end of your password.</p>
<p>Flex / SalesForce integration enables the creation of awesome cloud-based enterprise apps, so get out there and start coding!</p>
<p>Caspar</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/how-to/get-flex-builder-2/' rel='bookmark' title='Permanent Link: Get Flex Builder 2'>Get Flex Builder 2</a> <small> 1. If you don&#8217;t already own Flex Builder, you...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/flex-builder-2-orientation/' rel='bookmark' title='Permanent Link: Flex Builder 2 Orientation'>Flex Builder 2 Orientation</a> <small> 1. By default, Flex Builder opens a Start Page...</small></li><li><a href='http://www.soliantconsulting.com/blog/how-to/install-flexfm/' rel='bookmark' title='Permanent Link: Install FlexFM'>Install FlexFM</a> <small> 1. Download the FlexFM source code. While we may...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/10/salesforce-flash-builder-integration-announced/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Who should do the estimating?</title>
		<link>http://www.soliantconsulting.com/blog/2009/10/who-should-do-the-estimating/</link>
		<comments>http://www.soliantconsulting.com/blog/2009/10/who-should-do-the-estimating/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 13:22:33 +0000</pubDate>
		<dc:creator>porourke</dc:creator>
		
		<category><![CDATA[Planning is Everything]]></category>

		<guid isPermaLink="false">http://www.soliantconsulting.com/blog/?p=1116</guid>
		<description><![CDATA[Occasionally the question comes up as to who should estimate tasks and who should create the work breakdown structure (WBS) for a project.
Should the technical lead estimate the tasks for the developer? Should the developer estimate their own tasks? And if either the task estimation or the WBS creation take more than one person to [...]


Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/11/no-brown-mm%e2%80%99s/' rel='bookmark' title='Permanent Link: No Brown M&amp;M’s'>No Brown M&amp;M’s</a> <small>Have you ever heard the urban legend about Van Halen’s...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/03/451/' rel='bookmark' title='Permanent Link: Hey, Do You Guys Do Agile?'>Hey, Do You Guys Do Agile?</a> <small>I have a feeling this post gets written a lot...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/02/agile-self-organization/' rel='bookmark' title='Permanent Link: Agile Self-Organization?'>Agile Self-Organization?</a> <small>One of the key tenets of agile development is often...</small></li></ol>

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<p>Occasionally the question comes up as to who should estimate tasks and who should create the work breakdown structure (WBS) for a project.</p>
<p>Should the technical lead estimate the tasks for the developer? Should the developer estimate their own tasks? And if either the task estimation or the WBS creation take more than one person to do, doesn’t it get expensive to do all that planning?</p>
<p>Two principles from my studies in prepping for the PMP exam immediately come to mind (both from Rita Mulcahy’s excellent study guides www.rmcproject.com):</p>
<p>1. Estimating should be done by the person doing the work whenever possible, and,</p>
<p>2. The project plan, for which the WBS is one element, should follow the BARF principle. BARF stands for:</p>
<p>Bought into<br />
Approved<br />
Realistic<br />
Formal</p>
<p>For the WBS to be bought into and realistic, it must be created with the help of the team.</p>
<p>Of course there are always exceptions. Perhaps you don’t yet have all the people who will be doing the work staffed on your project or even know who they are. But when questions like this come up it’s good to know there are at least generally accepted best practices for guidance. And if you cut corners, don’t be surprised if down the road you find yourself wishing you spent a bit more time on the planning phase of your project.</p>


<p>Related posts:<ol><li><a href='http://www.soliantconsulting.com/blog/2009/11/no-brown-mm%e2%80%99s/' rel='bookmark' title='Permanent Link: No Brown M&amp;M’s'>No Brown M&amp;M’s</a> <small>Have you ever heard the urban legend about Van Halen’s...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/03/451/' rel='bookmark' title='Permanent Link: Hey, Do You Guys Do Agile?'>Hey, Do You Guys Do Agile?</a> <small>I have a feeling this post gets written a lot...</small></li><li><a href='http://www.soliantconsulting.com/blog/2009/02/agile-self-organization/' rel='bookmark' title='Permanent Link: Agile Self-Organization?'>Agile Self-Organization?</a> <small>One of the key tenets of agile development is often...</small></li></ol></p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.soliantconsulting.com/blog/2009/10/who-should-do-the-estimating/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
