Question:
I'm using FME with Smallworld 4.0. How can I export join attributes (e.g., export transformer bank id with the transformer)? I coudn't find it in the FME workbench.
Answer:
I think the easiest way to do this is to use the fme_pseudo_field_factory.
For example...
If
_pragma(classify_level=basic, usage={redefinable})
## used by FME SWAF interface to allow a customizer to add
## pseudo fields to the schema for Smallworld tables to be
## passed to FME.
transformer.define_shared_constant(:fme_pseudo_fields,
{fme_pseudo_field_factory.new_derived_field(:transformer_bank_id,:extdb_string)},
_false)
$
You can actually define more than one fme_pseudo_field for a given record exemplar if you want to.
Declaring :transformer_bank_id as a new derived field will make this "field" available to the FME feature. When FME asks a "transformer" for its :transformer_bank_id, it will simply call transformer_bank_id and use that value in the workspace.
There is nothing special about the naming convention of the pseudo field. The only thing to keep in mind is that the class on which you define :fme_pseudo_fields must respond (either as a method or field call) to the name of the derived field.
So you could actually accomplish the same thing as above with...
_pragma(classify_level=basic, usage={redefinable})
## used by FME SWAF interface to allow a customizer to add
## pseudo fields to the schema for Smallworld tables to be
## passed to FME.
transformer.define_shared_constant(:fme_pseudo_fields,
{fme_pseudo_field_factory.new_derived_field(:bank_id,:extdb_string)},
_false)
$
As long as you also have defined a method...
_method transformer.bank_id
## bank_id : integer
##
## returns self’s transformer_bank_id
_return _self.transformer_bank_id
_endmethod
$
The FME fme_pseudo_fields concept is very powerful because it allows you to send data to FME that is not stored in a single attribute in Smallworld.
I have used it in the past for exporting data from Physical Network Inventory (PNI). If you are familiar with that datamodel you will know that there are many layers of relationships. Some of the records have geometries and some do not. A customer wanted to export all underground and aerial routes (these are the features with geometry) but wanted to label the features in the exported format with data from a related non-RWO record. Using the fme_pseudo_fields approach made it very easy to create a Magik method that created a suitable labelling string based on the related records but expose the results to FME as a feature attribute.
8 comments:
Does this work for CST4.0?
fme_pseudo_field_factory is a class in FME410 for Smallworld 4.1
I have used it at 4.0. I believe that it originally shipped as a patch file so you may need to contact your Smallworld support desk to request the extra code.
For FME 400 the patch is part of Technical Support Bulletin Number 106
I've tried this with SW41 and it doesn't seem to work. I can see a couple of problems with the source, string length is hard coded to zero for pseudo fields and the pseudo field method doesn't get called. Is there a patch for this?
I have the same issue using pseudo_fields...
The method fme_tics_client.int!create_feature doesn't load any pseudo_field.
The only way to solve the problem was developing my own patch.
I have this issue to in SW4.1..
Basically the fme_tics_client.int!create_feature method don't load any pseudo_field. So, I develop a fix to put the pseudo_fields in the FME features objects.
There is an official patch for this which fixes the problems in SW41, the patch number is 118434_1 and it will be released in a translators TSB later this year. If you need it urgently then contact your local customer support organisation.
Why the logical field width is 0 at the input and output ? except for rwo_id
Post a Comment