I recently had cause to code a number of custom functoids to aid with some maps that I was writing.
Once these were developed and deployed to C:\Program Files\Microsoft BizTalk Server 2009\Developer Tools\Mapper Extensions a quick refresh allowed them to appear in toolbox. After dropping these on a map and configuring the appropriate inputs I tested the map to check that they worked as expected.
All but one of the functoids worked as expecetd, but the final functoid appeared not to be firing at all.
I had already tested the code used in a simple test harness application, so I was confident in the code used, but I still needed to figure out what the problem might be.
Debugging the map helped me on the way; for some reason the functoid in question was not shown correctly - the functoid definition was wrong.
After some investigations I found that the functoid type you assign when coding a custom functoid affects more than just the category it appears in; different functoid types have different capabilities, including what they can link too.
For example, a logical functoid can not provide content for an output element, it can only say whether the element exists. Map this via a Value Mapping functoid and the value of true or false can be seen in the output element.
The functoid I was having problems with was one whare I had used the XPath functoid type, this had seemed to be a good fit as I was looking up content in a config file using xpath and I wanted it to appear the advanced area.
From the table below you can see that this functoid type is marked as "Internal Only", preventing it from being used for custom functoids. Changing my type to String allowed the functoid to function as expected.
Category
Description
Toolbox Group
Assert
Internal Use Only
Advanced
Conversion
Converts characters to and from numerics and converts numbers from one base to another.
Conversion
Count
Internal Use Only
Advanced
Cumulative
Performs accumulations of the value of a field that occurs multiple times in a source document and outputs a single output.
Cumulative
DatabaseExtract
Internal Use Only
Database
DatabaseLookup
Internal Use Only
Database
DateTime
Adds date, time, date and time, or add days to a specified date, in output data.
Date/Time
ExistenceLooping
Internal Use Only
Advanced
Index
Internal Use Only
Advanced
Iteration
Internal Use Only
Advanced
Keymatch
Internal Use Only
Advanced
Logical
Controls conditional behavior of other functoids to determine whether particular output data is created.
Logical
Looping
Internal Use Only
Advanced
MassCopy
Internal Use Only
Advanced
Math
Performs specific numeric calculations such as addition, multiplication, and division.
Mathematical
NilValue
Internal Use Only
Advanced
Scientific
Performs specific scientific calculations such as logarithmic, exponential, and trigonometric functions.
Scientific
Scripter
Internal Use Only
Advanced
String
Manipulates data strings by using well-known string functions such as concatenation, length, find, and trim.
String
TableExtractor
Internal Use Only
Advanced
TableLooping
Internal Use Only
Advanced
Unknown
Internal Use Only
Advanced
ValueMapping
Internal Use Only
Advanced
XPath
Internal Use Only
Advanced
Links
http://msdn.microsoft.com/en-us/library/microsoft.biztalk.basefunctoids.functoidcategory(BTS.20).aspx
http://blog.eliasen.dk/CommentView,guid,d33b686b-b059-4381-a0e7-1c56e808f7f0.aspx