Professional Documents
Culture Documents
Transformation type:
Active/Passive
Connected
Multigroup External Procedure transformations operate in conjunction with
procedures you create outside of the Designer interface to extend PowerCenter
functionality. ou can create a Multigroup External Procedure transformation and
!ind it to a procedure that you develop using the functions descri!ed in Custom
"ransformation #unctions.
$se the Multigroup External Procedure transformation to create transformation
applications% such as sorting and aggregation% which re&uire all input rows to !e
processed !efore outputting any output rows. "o support this process% the input
and output functions occur separately in Multigroup External Procedure
transformations compared to External Procedure transformations.
"he 'ntegration (ervice passes the input data to the procedure using an input
function. "he output function is a separate function that you must enter in the
procedure code to pass output data to the 'ntegration (ervice. 'n contrast% in the
External Procedure transformation% an external procedure function does !oth
input and output% and its parameters consist of all the ports of the transformation.
ou can also use the Multigroup External Procedure transformation to create a
transformation that re&uires multiple input groups% multiple output groups% or
!oth. A group is the representation of a row of data entering or leaving a
transformation. #or example% you might create a Multigroup External Procedure
transformation with one input group and multiple output groups that parses )M*
data. +r% you can create a Multigroup External Procedure transformation with two
input groups and one output group that merges two streams of input data into
one stream of output data.
Working with Transformations Built On the Custom Transformation
ou can !uild transformations using the Custom transformation. (ome of the
PowerCenter transformations are !uilt using the Custom transformation. ,ules
that apply to Custom transformations% such as !loc-ing rules% also apply to
transformations !uilt using Custom transformations. #or example% when you
connect a Custom transformation in a mapping% you must verify that the data can
flow from all sources in a target load order group to the targets without the
'ntegration (ervice !loc-ing all sources. (imilarly% you must also verify this for
transformations !uilt using a Custom transformation.
"he following transformations that ship with 'nformatica products are !uilt using
the Custom transformation.
/""P transformation with PowerCenter
0ava transformation with PowerCenter
(1* transformation with PowerCenter
$nion transformation with PowerCenter
$nstructured Data transformation with PowerCenter
)M* Parser transformation with PowerCenter
)M* 2enerator transformation with PowerCenter
(AP/A*E3'Doc3'nterpreter transformation with PowerExchange for (AP
4et5eaver my(AP +ption
(AP/A*E3'Doc3Prepare transformation with PowerExchange for (AP
4et5eaver my(AP +ption
6AP'/,#C transformation with PowerExchange for (AP 4et5eaver my(AP
+ption
5e! (ervice Consumer transformation with PowerExchange for 5e! (ervices
Code Page Compatibility
5hen the 'ntegration (ervice runs in A(C'' mode% it passes data to the
Multigroup External Procedure transformation procedure in A(C''. 5hen the
'ntegration (ervice runs in $nicode mode% it passes data to the procedure in
$C(78.
$se the '4#A3C"Change(tringMode9: and '4#A3C"(etDataCodePage'D9:
functions in the Multigroup External Procedure transformation procedure code to
re&uest the data in a different format or in a different code page.
"he functions you can use depend on the data movement mode of the
'ntegration (ervice.
ASC mode! $se the '4#A3C"Change(tringMode9: function to re&uest the
data in $C(78. 5hen you use this function% the procedure must pass only A(C''
characters in $C(78 format to the 'ntegration (ervice. ou cannot use the
'4#A3C"(etDataCodePage'D9: function to change the code page when the
'ntegration (ervice runs in A(C'' mode.
"ni#ode mode! $se the '4#A3C"Change(tringMode9: function to re&uest the
data in M6C( 9multi7!yte character set:. 5hen the procedure re&uests the data
in M6C(% the 'ntegration (ervice passes data in the 'ntegration (ervice code
page. $se the '4#A3C"(etDataCodePage'D9: function to re&uest the data in a
different code page from the 'ntegration (ervice code page. "he code page you
specify in the '4#A3C"(etDataCodePage'D9: function must !e two7way
compati!le with the 'ntegration (ervice code page.
$ote: ou can also use the '4#A3C",e!ind'nputData"ype9: function to change
the format for a specific port in the Multigroup External Procedure transformation.
%istributing Custom Transformation Pro#edures
ou can copy a Multigroup External Procedure transformation from one
repository to another. 5hen you copy a Multigroup External Procedure
transformation !etween repositories% you must verify that the 'ntegration (ervice
machine the target repository uses contains the Multigroup External Procedure
transformation procedure.
Creating Custom Transformations
ou can create reusa!le Multigroup External Procedure transformations in the
"ransformation Developer% and add instances of the transformation to mappings.
ou can create non7reusa!le Multigroup External Procedure transformations in
the Mapping Designer or Mapplet Designer.
Each Multigroup External Procedure transformation specifies a module and a
procedure name. ou can create a Multigroup External Procedure transformation
!ased on an existing shared li!rary or D** containing the procedure% or you can
create a Multigroup External Procedure transformation as the !asis for creating
the procedure. 5hen you create a Multigroup External Procedure transformation
to use with an existing shared li!rary or D**% ma-e sure you define the correct
module and procedure name.
5hen you create a Multigroup External Procedure transformation as the !asis for
creating the procedure% select the transformation and generate the code. "he
Designer uses the transformation properties when it generates the procedure
code. 't generates code in a single directory for all transformations sharing a
common module name.
"he Designer generates the following files.
m&'module&name(!#! Defines the module. "his file includes an initiali;ation
function% m3<module3name=3module'nit9: that lets you write code you want the
'ntegration (ervice to run when it loads the module. (imilarly% this file includes a
deinitiali;ation function% m3<module3name=3moduleDeinit9:% that lets you write
code you want the 'ntegration (ervice to run !efore it unloads the module.
p&'pro#edure&name(!#! Defines the procedure in the module. "his file
contains the code that implements the procedure logic% such as data cleansing
or merging data.
makefile!ai)* makefile!ai)+,* makefile!hp* makefile!hp+,*
makefile!hpparis#+,* makefile!linu)* makefile!sol* and makefile!sol+,! Ma-e
files for the $4') platforms. $se ma-efile.aix>? for >?7!it A') platforms%
ma-efile.sol>? for >?7!it (olaris platforms% and ma-efile.hp>? for >?7!it /P7$)
9'tanium: platforms.
-ules and .uidelines
$se the following rules and guidelines when you create a Multigroup External
Procedure transformation.
Multigroup External Procedure transformations are connected transformations.
ou cannot reference a Multigroup External Procedure transformation in an
expression.
ou can include multiple procedures in one module. #or example% you can
include an )M* writer procedure and an )M* parser procedure in the same
module.
ou can !ind one shared li!rary or D** to multiple Multigroup External
Procedure transformation instances if you write the procedure code to handle
multiple Multigroup External Procedure transformation instances.
5hen you write the procedure code% you must ma-e sure it does not violate
!asic mapping rules.
"he Multigroup External Procedure transformation sends and receives high
precision decimals as high precision decimals.
$se multi7threaded code in Multigroup External Procedure transformation
procedures.
Custom Transformation Components
5hen you configure a Multigroup External Procedure transformation% you define
the following components.
Transformation tab! ou can rename the transformation and add a description
on the "ransformation ta!.
Ports tab! ou can add and edit ports and groups to a Multigroup External
Procedure transformation. ou can also define the input ports an output port
depends on. #or more information% see 5or-ing with 2roups and Ports.
Port Attribute %efinitions tab! ou can create user7defined port attri!utes for
Multigroup External Procedure transformation ports. #or more information a!out
creating and editing port attri!utes% see 5or-ing with Port Attri!utes.
Properties tab! ou can define transformation properties such as module and
function identifiers% transaction properties% and the runtime location. #or more
information a!out defining transformation properties% see Custom
"ransformation Properties.
nitiali/ation Properties tab! ou can define properties that the procedure uses
at runtime% such as during initiali;ation. #or more information% see 5or-ing with
Procedure Properties.
0etadata 1)tensions tab! ou can create metadata extensions to define
properties that the procedure uses at runtime% such as during initiali;ation. #or
more information% see 5or-ing with Procedure Properties.
Working with .roups and Ports
A Multigroup External Procedure transformation has !oth input and output
groups. 't also can have input ports% output ports% and input/output ports. ou
create and edit groups and ports on the Ports ta! of the Multigroup External
Procedure transformation. ou can also define the relationship !etween input
and output ports on the Ports ta!.
Creating .roups and Ports
ou can create multiple input groups and multiple output groups in a Multigroup
External Procedure transformation. ou must create at least one input group and
one output group. "o create an input group% clic- the Create 'nput 2roup icon. "o
create an output group% clic- the Create +utput 2roup icon. ou can change the
existing group names !y typing in the group header. 5hen you create a passive
Custom transformation% you can only create one input group and one output
group.
5hen you create a port% the Designer adds it !elow the currently selected row or
group. A port can !elong to the input group and the output group that appears
immediately a!ove it. An input/output port that appears !elow the input group it is
also part of the output group. An input/output port that appears !elow the output
group it is also part of the input group.
2roups that share ports are called a coupled group. Adjacent groups of opposite
type can share ports. +ne group can !e part of more than one coupled group.
#or example% in #igure @7A% 'nput2roupA and +utput2roupA is a coupled group
that shares +,DE,3'DA.
'f the transformation has a Port Attri!ute Definitions ta!% you can edit the
attri!utes for each port.
1diting .roups and Ports
$se the following rules and guidelines when you edit ports and groups in a
Multigroup External Procedure transformation.
ou can change group names !y typing in the group header.
ou can only enter A(C'' characters for port and group names.
+nce you create a group% you cannot change the group type. 'f you need to
change the group type% delete the group and add a new group.
5hen you delete a group% the Designer deletes all ports of the same type in that
group. /owever% all input/output ports remain in the transformation% !elong to
the group a!ove them% and change to input ports or output ports% depending on
the type of group you delete. #or example% an output group contains output
ports and input/output ports. ou delete the output group. "he Designer deletes
the output ports. 't changes the input/output ports to input ports. "hose input
ports !elong to the input group with the header directly a!ove them.
"o move a group up or down% select the group header and clic- the Move Port
$p or Move Port Down !utton. "he ports a!ove and !elow the group header
remain the same% !ut the groups to which they !elong might change.
"o create an input/output port% the transformation must have an input group and
an output group.
%efining Port -elationships
6y default% an output port in a Multigroup External Procedure transformation
depends on all input ports. /owever% you can define the relationship !etween
input and output ports in a Multigroup External Procedure transformation. 5hen
you do this% you can view lin- paths in a mapping containing a Multigroup
External Procedure transformation and you can see which input ports an output
port depends on. ou can also view source column dependencies for target ports
in a mapping containing a Multigroup External Procedure transformation.
"o define the relationship !etween ports in a Multigroup External Procedure
transformation% create a port dependency. A port dependency is the relationship
!etween an output or input/output port and one or more input or input/output
ports. 5hen you create a port dependency% !ase it on the procedure logic in the
code.
"o create a port dependency% clic- Custom "ransformation on the Ports ta! and
choose Port Dependencies.
#or example% create a procedure that parses )M* data. ou create a Multigroup
External Procedure transformation with one input group containing one input port
and multiple output groups containing multiple output ports. According to the
procedure logic% all output ports depend on the input port. ou can define this
relationship in the Multigroup External Procedure transformation !y creating a
port dependency for each output port. Define each port dependency so that the
output port depends on the one input port.
"o create a port dependency.
2! +n the Ports ta!% clic- Custom "ransformation and choose Port Dependencies.
3!
'n the +utput Port Dependencies dialog !ox% select an output or input/output
port in the +utput Port field.
4!
'n the 'nput Ports pane% select an input or input/output port on which the output
port or input/output port depends.
,! Clic- Add.
5!
,epeat steps @ to ? to include more input or input/output ports in the port
dependency.
+! "o create another port dependency% repeat steps 8 to B.
6! Clic- +C.
5hen you create a port attri!ute% define the following properties.
$ame! "he name of the port attri!ute.
%atatype! "he datatype of the port attri!ute value. ou can choose 6oolean%
4umeric% or (tring.
7alue! "he default value of the port attri!ute. "his property is optional. 5hen
you enter a value here% the value applies to all ports in the Multigroup External
Procedure transformation. ou can override the port attri!ute value for each port
on the Ports ta!.
ou define port attri!utes for each Multigroup External Procedure transformation.
ou cannot copy a port attri!ute from one Multigroup External Procedure
transformation to another.
1diting Port Attribute 7alues
After you create port attri!utes% you can edit the port attri!ute values for each
port in the transformation. "o edit the port attri!ute values% clic- Custom
"ransformation on the Ports ta! and choose Edit Port Attri!ute.
#igure @7? shows where you edit port attri!ute values.
ou can change the port attri!ute value for a particular port !y clic-ing the +pen
!utton. "his opens the Edit Port Attri!ute Default Dalue dialog !ox. +r% you can
enter a new value !y typing directly in the Dalue column.
ou can filter the ports listed in the Edit Port *evel Attri!utes dialog !ox !y
choosing a group from the (elect 2roup field
Custom Transformation Properties
Properties for the Multigroup External Procedure transformation apply to !oth the
procedure and the transformation. Configure the Multigroup External Procedure
transformation properties on the Properties ta! of the Custom transformation.
"a!le @7A descri!es the Multigroup External Procedure transformation properties.
"a!le @7A. Custom "ransformation Properties
+ption Description
*anguage *anguage used for the procedure code. ou define the
language when you create the Multigroup External Procedure
transformation. 'f you need to change the language% create a
new Multigroup External Procedure transformation.
Module 'dentifier Module name. Applies to Multigroup External Procedure
transformation procedures developed using C or CEE.
Enter only A(C'' characters in this field. ou cannot enter
multi!yte characters.
"his property is the !ase name of the D** or the shared li!rary
that contains the procedure. "he Designer uses this name to
create the C file when you generate the procedure code.
#unction 'dentifier 4ame of the procedure in the module. Applies to Multigroup
External Procedure transformation procedures developed
using C.
Enter only A(C'' characters in this field. ou cannot enter
multi!yte characters.
"he Designer uses this name to create the C file where you
enter the procedure code.
Class 4ame Class name of the Multigroup External Procedure
transformation procedure. Applies to Multigroup External
Procedure transformation procedures developed using CEE or
0ava.
Enter only A(C'' characters in this field. ou cannot enter
multi!yte characters.
,untime *ocation *ocation that contains the D** or shared li!rary. Default is
FPMExtProcDir. Enter a path relative to the 'ntegration (ervice
machine that runs the session using the Multigroup External
Procedure transformation.
'f you ma-e this property !lan-% the 'ntegration (ervice uses
the environment varia!le defined on the 'ntegration (ervice
machine to locate the D** or shared li!rary.
ou must copy all D**s or shared li!raries to the runtime
location or to the environment varia!le defined on the
'ntegration (ervice machine. "he 'ntegration (ervice fails to
load the procedure when it cannot locate the D**% shared
li!rary% or a referenced file.
"racing *evel Amount of detail displayed in the session log for this
transformation. Default is 4ormal.
's Partitiona!le 'ndicates if you can create multiple partitions in a pipeline that
uses this transformation.
7
4o. "he transformation cannot !e partitioned. "he
transformation and other transformations in the same pipeline
are limited to one partition.
7
*ocally. "he transformation can !e partitioned% !ut the
'ntegration (ervice must run all partitions in the pipeline on the
same node. Choose *ocal when different partitions of the
Custom transformation must share o!jects in memory.
7
Across 2rid. "he transformation can !e partitioned% and the
'ntegration (ervice can distri!ute each partition to different
nodes.
Default is 4o.
'nputs Must 6loc- 'ndicates if the procedure associated with the transformation
must !e a!le to !loc- incoming data. Default is ena!led.
's Active 'ndicates if this transformation is an active or passive
transformation.
ou cannot change this property after you create the
Multigroup External Procedure transformation. 'f you need to
change this property% create a new Multigroup External
Procedure transformation and select the correct property value.
$pdate (trategy
"ransformation
'ndicates if this transformation defines the update strategy for
output rows. Default is disa!led. ou can ena!le this for active
Multigroup External Procedure transformations.
"ransformation
(cope
'ndicates how the 'ntegration (ervice applies the
transformation logic to incoming data.
7
,ow
7
"ransaction
7
All 'nput
5hen the transformation is passive% this property is always
,ow. 5hen the transformation is active% this property is All
'nput !y default.
2enerate
"ransaction
'ndicates if this transformation can generate transactions.
5hen a Multigroup External Procedure transformation
generates transactions% it generates transactions for all output
groups.
Default is disa!led. ou can only ena!le this for active
Multigroup External Procedure transformations.
+utput is
,epeata!le
'ndicates if the order of the output data is consistent !etween
session runs.
7
4ever. "he order of the output data is inconsistent !etween
session runs. "his is the default for active transformations.
7
6ased +n 'nput +rder. "he output order is consistent !etween
session runs when the input data order is consistent !etween
session runs. "his is the default for passive transformations.
7
Always. The order of the output data is consistent between session
runs even if the order of the input data is inconsistent between
session runs.
,e&uires (ingle
"hread Per
Partition
'ndicates if the 'ntegration (ervice processes each partition at
the procedure with one thread. 5hen you ena!le this option%
the procedure code can use thread7specific operations. Default
is ena!led.
+utput is
Deterministic
'ndicates whether the transformation generates consistent
output data !etween session runs. Ena!le this property to
perform recovery on sessions that use this transformation.
Warning: 'f you configure a transformation as repeata!le and deterministic% it is
your responsi!ility to ensure that the data is repeata!le and deterministic. 'f you
try to recover a session with transformations that do not produce the same data
!etween the session and the recovery% the recovery process can result in
corrupted data.
Setting the "pdate Strategy
$se an active Multigroup External Procedure transformation to set the update
strategy for a mapping at the following levels.
Within the pro#edure! ou can write the procedure code to set the update
strategy for output rows. "he procedure can flag rows for insert% update% delete%
or reject.
Within the mapping! $se the Multigroup External Procedure transformation in
a mapping to flag rows for insert% update% delete% or reject. (elect the $pdate
(trategy "ransformation property for the Multigroup External Procedure
transformation.
Within the session! Configure the session to treat the source rows as data
driven.
'f you do not configure the Multigroup External Procedure transformation to
define the update strategy% or you do not configure the session as data driven%
the 'ntegration (ervice does not use the procedure code to flag the output rows.
'nstead% when the Multigroup External Procedure transformation is active% the
'ntegration (ervice flags the output rows as insert. 5hen the Multigroup External
Procedure transformation is passive% the 'ntegration (ervice retains the row type.
#or example% when a row flagged for update enters a passive Multigroup
External Procedure transformation% the 'ntegration (ervice maintains the row
type and outputs the row as update.
Working with Thread8Spe#ifi# Pro#edure Code
Multigroup External Procedure transformation procedures can include thread7
specific operations. A thread7specific operation is code that performs an action
!ased on the thread that is processing the procedure.
ou can configure the Multigroup External Procedure transformation so the
'ntegration (ervice uses one thread to process the Multigroup External
Procedure transformation for each partition using the ,e&uires (ingle "hread Per
Partition property.
5hen you configure a Custom transformation to process each partition with one
thread% the 'ntegration (ervice calls the following functions with the same thread
for each partition.
p3<proc3name=3partition'nit9:
p3<proc3name=3partitionDeinit9:
p3<proc3name=3input,ow4otification9:
p3<proc3name=3data6dry,ow4otification9:
p3<proc3name=3eof4otification9:
ou can include thread7specific operations in these functions !ecause the
'ntegration (ervice uses the same thread to process these functions for each
partition. #or example% you might attach and detach threads to a 0ava Dirtual
Machine.
$ote: 5hen you configure a Multigroup External Procedure transformation to
process each partition with one thread% the 5or-flow Manager adds partition
points depending on the mapping configuration.
Working with Transa#tion Control
ou can define transaction control for Multigroup External Procedure
transformations using the following transformation properties.
Transformation S#ope! Determines how the 'ntegration (ervice applies the
transformation logic to incoming data.
.enerate Transa#tion! 'ndicates that the procedure generates transaction rows
and outputs them to the output groups.
Transformation S#ope
ou can configure how the 'ntegration (ervice applies the transformation logic to
incoming data. ou can choose one of the following values.
-ow! Applies the transformation logic to one row of data at a time. Choose ,ow
when the results of the procedure depend on a single row of data. #or example%
you might choose ,ow when a procedure parses a row containing an )M* file.
Transa#tion! Applies the transformation logic to all rows in a transaction.
Choose "ransaction when the results of the procedure depend on all rows in the
same transaction% !ut not on rows in other transactions. 5hen you choose
"ransaction% you must connect all input groups to the same transaction control
point. #or example% you might choose "ransaction when the procedure performs
aggregate calculations on the data in a single transaction.
All nput! Applies the transformation logic to all incoming data. 5hen you
choose All 'nput% the 'ntegration (ervice drops transaction !oundaries. Choose
All 'nput when the results of the procedure depend on all rows of data in the
source. #or example% you might choose All 'nput when the procedure performs
aggregate calculations on all incoming data% or when it sorts all incoming data.
.enerate Transa#tion
ou can write the procedure code to output transactions% such as commit and
roll!ac- rows. 5hen the procedure outputs commit and roll!ac- rows% configure
the Multigroup External Procedure transformation to generate transactions.
(elect the 2enerate "ransaction transformation property. ou can ena!le this
property for active Custom transformations.
5hen the procedure outputs a commit or roll!ac- row% it outputs or rolls !ac- the
row for all output groups.
5hen you configure the transformation to generate transactions% the 'ntegration
(ervice treats the Multigroup External Procedure transformation li-e a
"ransaction Control transformation. Most rules that apply to a "ransaction
Control transformation in a mapping also apply to the Multigroup External
Procedure transformation. #or example% when you configure a Multigroup
External Procedure transformation to generate transactions% you cannot
concatenate pipelines or pipeline !ranches containing the transformation.
5hen you edit or create a session using a Multigroup External Procedure
transformation configured to generate transactions% configure it for user7defined
commit.
Working with Transa#tion Boundaries
"he 'ntegration (ervice handles transaction !oundaries entering and leaving
Multigroup External Procedure transformations !ased on the mapping
configuration and the Multigroup External Procedure transformation properties.
"a!le @78 descri!es how the 'ntegration (ervice handles transaction !oundaries
at Multigroup External Procedure transformations.
"a!le @78. "ransaction 6oundary /andling with Custom "ransformations
"ransformation
(cope
2enerate "ransactions
Ena!led
2enerate "ransactions Disa!led
,ow 'ntegration (ervice drops
incoming transaction
!oundaries and does not call
the data !oundary notification
function.
't outputs transaction rows
according to the procedure
logic across all output groups.
5hen the incoming data for all
input groups comes from the
same transaction control point% the
'ntegration (ervice preserves
incoming transaction !oundaries
and outputs them across all output
groups. /owever% it does not call
the data !oundary notification
function.
5hen the incoming data for the
input groups comes from different
transaction control points% the
'ntegration (ervice drops
incoming transaction !oundaries.
't does not call the data !oundary
notification function. "he
'ntegration (ervice outputs all
rows in one open transaction.
"ransaction 'ntegration (ervice preserves
incoming transaction
!oundaries and calls the data
!oundary notification function.
/owever% it outputs
'ntegration (ervice preserves
incoming transaction !oundaries
and calls the data !oundary
notification function.
't outputs the transaction rows
transaction rows according to
the procedure logic across all
output groups.
across all output groups.
All 'nput 'ntegration (ervice drops
incoming transaction
!oundaries and does not call
the data !oundary notification
function. "he 'ntegration
(ervice outputs transaction
rows according to the
procedure logic across all
output groups.
'ntegration (ervice drops
incoming transaction !oundaries
and does not call the data
!oundary notification function. 't
outputs all rows in one open
transaction
Blo#king nput %ata
6y default% the 'ntegration (ervice concurrently reads sources in a target load
order group. /owever% you can write the procedure code to !loc- input data on
some input groups. 6loc-ing is the suspension of the data flow into an input
group of a multiple input group transformation.
"o use a Multigroup External Procedure transformation to !loc- input data% you
must write the procedure code to !loc- and un!loc- data. ou must also ena!le
!loc-ing on the Properties ta! for the Multigroup External Procedure
transformation.
Writing the Pro#edure Code to Blo#k %ata
ou can write the procedure to !loc- and un!loc- incoming data. "o !loc-
incoming data% use the '4#A3C"6loc-'nput#low9: function. "o un!loc- incoming
data% use the '4#A3C"$n!loc-'nput#low9: function.
ou might want to !loc- input data if the procedure needs to alternate reading
from input groups. 5ithout the !loc-ing functionality% you would need to write the
procedure code to !uffer incoming data. ou can !loc- input data instead of
!uffering it which usually increases session performance.
#or example% you need to create an procedure with two input groups. "he
procedure reads a row from the first input group and then reads a row from the
second input group. 'f you use !loc-ing% you can write the procedure code to
!loc- the flow of data from one input group while it processes the data from the
other input group. 5hen you write the procedure code to !loc- data% you
increase performance !ecause the procedure does not need to copy the source
data to a !uffer. /owever% you could write the procedure to allocate a !uffer and
copy the data from one input group to the !uffer until it is ready to process the
data. Copying source data to a !uffer decreases performance.
,elated "opics.
6loc-ing #unctions.
Configuring Custom Transformations as Blo#king Transformations
5hen you create a Multigroup External Procedure transformation% the Designer
ena!les the 'nputs Must 6loc- transformation property !y default. "his property
affects data flow validation when you save or validate a mapping. 5hen you
ena!le this property% the Multigroup External Procedure transformation is a
!loc-ing transformation. 5hen you clear this property% the Multigroup External
Procedure transformation is not a !loc-ing transformation.
Configure the Multigroup External Procedure transformation as a !loc-ing
transformation when the procedure code must !e a!le to !loc- input data.
ou can configure the Multigroup External Procedure transformation as a non7
!loc-ing transformation when one of the following conditions is true.
"he procedure code does not include the !loc-ing functions.
"he procedure code includes two algorithms% one that uses !loc-ing and the
other that copies the source data to a !uffer allocated !y the procedure instead
of !loc-ing data. "he code chec-s whether or not the 'ntegration (ervice allows
the Multigroup External Procedure transformation to !loc- data. "he procedure
uses the algorithm with the !loc-ing functions when it can !loc-% and uses the
other algorithm when it cannot !loc-. ou might want to do this to create a
Multigroup External Procedure transformation that you use in multiple mapping
configurations.
$ote: 5hen the procedure !loc-s data and you configure the Multigroup
External Procedure transformation as a non7!loc-ing transformation% the
'ntegration (ervice fails the session.
7alidating 0appings with Custom Transformations
5hen you include a Multigroup External Procedure transformation in a mapping%
!oth the Designer and 'ntegration (ervice validate the mapping. "he Designer
validates the mapping you save or validate and the 'ntegration (ervice validates
the mapping when you run the session.
7alidating at %esign Time
5hen you save or validate a mapping% the Designer performs data flow
validation. 5hen the Designer does this% it verifies that the data can flow from all
sources in a target load order group to the targets without !loc-ing
transformations !loc-ing all sources. (ome mappings with !loc-ing
transformations are invalid.
7alidating at -untime
5hen you run a session% the 'ntegration (ervice validates the mapping against
the procedure code at runtime. 5hen the 'ntegration (ervice does this% it trac-s
whether or not it allows the Multigroup External Procedure transformations to
!loc- data.
Configure the Custom transformation as a blo#king transformation! "he
'ntegration (ervice always allows the Custom transformation to !loc- data.
Configure the Custom transformation as a non8blo#king transformation!
"he 'ntegration (ervice allows the Custom transformation to !loc- data
depending on the mapping configuration. 'f the 'ntegration (ervice can !loc-
data at the Custom transformation without !loc-ing all sources in the target load
order group simultaneously% it allows the Custom transformation to !loc- data.
ou can write the procedure code to chec- whether or not the 'ntegration (ervice
allows a Multigroup External Procedure transformation to !loc- data. $se the
'4#A3C"3get'nternalProperty9: function to access the
'4#A3C"3",A4(3MA36*+CC3DA"A property 'D. "he 'ntegration (ervice
returns ",$E when the Multigroup External Procedure transformation can !loc-
data% and it returns #A*(E when the Multigroup External Procedure
transformation cannot !loc- data.
Working with Pro#edure Properties
ou can define property name and value pairs in the Multigroup External
Procedure transformation that the procedure can use when the 'ntegration
(ervice runs the procedure% such as during initiali;ation time. ou can create
user7defined properties on the following ta!s of the Multigroup External
Procedure transformation.
0etadata 1)tensions! ou can specify the property name% datatype% precision%
and value. $se metadata extensions for passing information to the procedure.
nitiali/ation Properties! ou can specify the property name and value.
5hile you can define properties on !oth ta!s in the Multigroup External
Procedure transformation% the Metadata Extensions ta! lets you provide more
detail for the property. $se metadata extensions to pass properties to the
procedure.
#or example% you create a Multigroup External Procedure transformation
procedure that sorts data after transforming it. ou could create a !oolean
metadata extension named (ort3Ascending. 5hen you use the Multigroup
External Procedure transformation in a mapping% you can choose "rue or #alse
for the metadata extension% depending on how you want the procedure to sort
the data.
5hen you define a property in the Multigroup External Procedure transformation%
use the get all property names functions% such as
'4#A3C"2etAllProperty4amesM9:% to access the names of all properties defined
on the 'nitiali;ation Properties and Metadata Extensions ta!. $se the get external
property functions% such as '4#A3C"3getExternalPropertyM9:% to access the
property name and value of a property 'D you specify.
$ote: 5hen you define a metadata extension and an initiali;ation property with
the same name% the property functions only return information for the metadata
extension.
Creating Custom Transformation Pro#edures
ou can create Custom transformation procedures that run on @87!it or >?7!it
'ntegration (ervice machines. $se the following steps as a guideline when you
create a Multigroup External Procedure transformation procedure.
A.
'n the "ransformation Developer% create a reusa!le Multigroup External
Procedure transformation. +r% in the Mapplet Designer or Mapping Designer%
create a non7reusa!le Multigroup External Procedure transformation.
8. 2enerate the template code for the procedure.
5hen you generate the procedure code% the Designer uses the information from
the Multigroup External Procedure transformation to create C source code files
and ma-efiles.
@. Modify the C files to add the procedure logic.
?.
$se a C/CEE compiler to compile and lin- the source code files into a D** or
shared li!rary and copy it to the 'ntegration (ervice machine.
B. Create a mapping with the Multigroup External Procedure transformation.
>. ,un the session in a wor-flow.
"his section includes an example to demonstrate this process. "he steps in this
section create a Multigroup External Procedure transformation that contains two
input groups and one output group. "he Multigroup External Procedure
transformation procedure verifies that the Multigroup External Procedure
transformation uses two input groups and one output group. 't also verifies that
the num!er of ports in all groups are e&ual and that the port datatypes are the
same for all groups. "he procedure ta-es rows of data from each input group and
outputs all rows to the output group.
Step 2! Create the Custom Transformation
"o create a Multigroup External Procedure transformation.
2! 'n the "ransformation Developer% clic- "ransformation = Create.
3!
'n the Create "ransformation dialog !ox% choose Multigroup External
Procedure transformation% enter a transformation name% and clic- Create.
'n the $nion example% enter C"3'nf3$nion as the transformation name.
4!
'n the Active or Passive dialog !ox% create the transformation as a passive or
active transformation% and clic- +C.
'n the $nion example% choose Active.
,! Clic- Done to close the Create "ransformation dialog !ox.
5! +pen the transformation and clic- the Ports ta!. Create groups and ports.
ou can edit the groups and ports later% if necessary.
'n the $nion example% create the groups and ports shown in #igure @7B.
6!
Clic- the Metadata Extensions ta! to enter metadata extensions% such as
properties the procedure might need for initiali;ation.
'n the $nion example% do not create metadata extensions.
9! Clic- the Port Attri!ute Definitions ta! to create port attri!utes% if necessary.
'n the $nion example% do not create port attri!utes.
After you create the Multigroup External Procedure transformation that calls the
procedure% the next step is to generate the C files.
Step 3! .enerate the C :iles
After you create a Multigroup External Procedure transformation% you generate
the source code files. "he Designer generates file names in lower case.
"o generate the code for a Multigroup External Procedure transformation
procedure.
2!
'n the "ransformation Developer% select the transformation and clic-
"ransformation = 2enerate Code.
3!
(elect the procedure you just created. "he Designer lists the procedures as
<module3name=.<procedure3name=.
'n the $nion example% select $nionDemo.$nion.
4! (pecify the directory where you want to generate the files% and clic- 2enerate.
'n the $nion example% select <client3installation3directory=/").
"he Designer creates a su!directory% <module3name=% in the directory you
specified. 'n the $nion example% the Designer creates
<client3installation3directory=/")/$nionDemo. 't also creates the following files.
m3$nionDemo.c
m3$nionDemo.h
p3$nion.c
p3$nion.h
ma-efile.aix 9@87!it:% ma-efile.aix>? 9>?7!it:% ma-efile.hp 9@87!it:% ma-efile.hp>?
9>?7!it:% ma-efile.hpparisc>?% ma-efile.linux 9@87!it:% and ma-efile.sol 9@87!it:.
Step 4! :ill Out the Code with the Transformation ;ogi#
ou must code the procedure C file. +ptionally% you can also code the module C
file. 'n the $nion example% you fill out the procedure C file only. ou do not need
to fill out the module C file.
"o code the procedure C file.
2! +pen p3<procedure3name=.c for the procedure.
'n the $nion example% open p3$nion.c.
3! Enter the C code for the procedure.
4! (ave the modified file.
'n the $nion example% use the following code.
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
G
G Copyright 9c: 8HHB 'nformatica Corporation. "his file contains
G material proprietary to 'nformatica Corporation and may not !e copied
G or distri!uted in any form without the written permission of 'nformatica
G Corporation
G
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
G Custom "ransformation p3union Procedure #ile
G
G "his file contains code that functions that will !e called !y the main
G server executa!le.
G
G for more information on these files%
G see F9'4#A3/+ME:/ExtProc/include/,eadme.txt
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
/G
G '4#+,MA"'CA I$4'+4 DEM+I developed using the AP' for custom
G transformations.
G #ile 4ame. p3$nion.c
G
G An example of a custom transformation 9I$nionI: using PowerCenterJ.H
G
G "he purpose of the I$nionI transformation is to com!ine pipelines with the
G same row definition into one pipeline 9i.e. union of multiple pipelines:.
G K 4ote that it does not correspond to the mathematical definition of union
G since it does not eliminate duplicate rows.L
G
G "his example union transformation allows 4 input pipelines 9 each
G corresponding to an input group: to !e com!ined into one pipeline.
G
G "o use this transformation in a mapping% the following attri!utes must !e
G true.
G a. "he transformation must have =M 8 input groups and only one output group.
G !. 'n the Properties ta! set the following properties.
G i. Module 'dentifier. $nionDemo
G ii. #unction 'dentifier. $nion
G iii. 'nputs May 6loc-. $nchec-ed
G iv. 's Active. Chec-ed
G v. $pdate (trategy "ransformation. $nchec-ed G
G vi. "ransformation (cope. All
G vii. 2enerate "ransaction. $nchec-ed G
G
G G "his version of the union transformation does not provide code for
G changing the update strategy or for generating transactions.
G c. "he input groups and the output group must have the same num!er of ports
G and the same datatypes. "his is verified in the initiali;ation of the
G module and the session is failed if this is not true.
G d. "he transformation can !e used in multiple num!er of times in a "arget
G *oad +rder 2roup and can also !e contained within multiple partitions.
G
G/
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
'ncludes
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
include <stdli!.h=
Ninclude Op3union.hO
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#orward Declarations
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( validateProperties9const '4#A3C"3PA,"'"'+43/A4D*EG
partition:P
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unctions
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3proc'nit
Description. 'nitiali;ation for the procedure. ,eturns '4#A3($CCE(( if
procedure initiali;ation succeeds% else return '4#A3#A'*$,E.
'nput. procedure 7 the handle for the procedure
+utput. 4one
,emar-s. "his function will get called once for the session at
initiali;ation time. 't will !e called after the module'nit function.
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3proc'nit9 '4#A3C"3P,+CED$,E3/A4D*E procedure:
Q
const '4#A3C"3",A4(#+,MA"'+43/A4D*EG transformation M 4$**P
const '4#A3C"3PA,"'"'+43/A4D*EG partition M 4$**P
si;e3t n"ransformations M H% nPartitions M H% i M HP
/G *og a message indicating !eginning of the procedure initiali;ation G/
'4#A3C"*ogMessageM9 eE(*3*+2%
Ounion3demo. Procedure initiali;ation started ...O :P
'4#A3C"Change(tringMode9 procedure% eA(M3M6C( :P
/G 2et the transformation handles G/
transformation M '4#A3C"2etChildren/andles9 procedure%
Rn"ransformations%
",A4(#+,MA"'+4"PE:P
/G #or each transformation verify that the Hth partition has the correct
G properties. "his does not need to !e done for all partitions since rest
G of the partitions have the same information G/
for 9i M HP i < n"ransformationsP iEE:
Q
/G 2et the partition handle G/
partition M '4#A3C"2etChildren/andles9transformationKiL%
RnPartitions% PA,"'"'+4"PE :P
if 9validateProperties9partition: SM '4#A3($CCE((:
Q
'4#A3C"*ogMessageM9 eE(*3E,,+,%
Ounion3demo. #ailed to validate attri!utes of O
Othe transformationO:P
return '4#A3#A'*$,EP
T
T
'4#A3C"*ogMessageM9 eE(*3*+2%
Ounion3demo. Procedure initiali;ation completed.O :P
return '4#A3($CCE((P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3procDeinit
Description. Deinitiali;ation for the procedure. ,eturns '4#A3($CCE(( if
procedure deinitiali;ation succeeds% else return '4#A3#A'*$,E.
'nput. procedure 7 the handle for the procedure
+utput. 4one
,emar-s. "his function will get called once for the session at
deinitiali;ation time. 't will !e called !efore the moduleDeinit
function.
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3procDeinit9 '4#A3C"3P,+CED$,E3/A4D*E
procedure%
'4#A3("A"$( session(tatus :
Q
/G Do nothing ... G/
return '4#A3($CCE((P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3partition'nit
Description. 'nitiali;ation for the partition. ,eturns '4#A3($CCE(( if
partition deinitiali;ation succeeds% else return '4#A3#A'*$,E.
'nput. partition 7 the handle for the partition
+utput. 4one
,emar-s. "his function will get called once for each partition for each
transformation in the session.
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3partition'nit9 '4#A3C"3PA,"'"'+43/A4D*E partition :
Q
/G Do nothing ... G/
return '4#A3($CCE((P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3partitionDeinit
Description. Deinitiali;ation for the partition. ,eturns '4#A3($CCE(( if
partition deinitiali;ation succeeds% else return '4#A3#A'*$,E.
'nput. partition 7 the handle for the partition
+utput. 4one
,emar-s. "his function will get called once for each partition for each
transformation in the session.
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3partitionDeinit9 '4#A3C"3PA,"'"'+43/A4D*E
partition :
Q
/G Do nothing ... G/
return '4#A3($CCE((P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3input,ow4otification
Description. 4otification that a row needs to !e processed for an input
group in a transformation for the given partition. ,eturns '4#A3,+5($CCE((
if the input row was processed successfully% '4#A3,+5#A'*$,E if the input
row was not processed successfully and '4#A3#A"A*E,,+, if the input row
causes the session to fail.
'nput. partition 7 the handle for the partition for the given row
group 7 the handle for the input group for the given row
+utput. 4one
,emar-s. "his function is pro!a!ly where the meat of your code will go%
as it is called for every row that gets sent into your transformation.
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3,+5("A"$(
p3union3input,ow4otification9 '4#A3C"3PA,"'"'+43/A4D*E partition%
'4#A3C"3'4P$"2,+$P3/A4D*E input2roup :
Q
const '4#A3C"3+$"P$"2,+$P3/A4D*EG output2roups M 4$**P
const '4#A3C"3'4P$"P+,"3/A4D*EG input2roupPorts M 4$**P
const '4#A3C"3+$"P$"P+,"3/A4D*EG output2roupPorts M 4$**P
si;e3t n4um'nputPorts M H% n4um+utput2roups M H%
n4umPorts'n+utput2roup M H% i M HP
/G 2et the output group port handles G/
output2roups M '4#A3C"2etChildren/andles9partition%
Rn4um+utput2roups%
+$"P$"2,+$P"PE:P
output2roupPorts M '4#A3C"2etChildren/andles9output2roupsKHL%
Rn4umPorts'n+utput2roup%
+$"P$"P+,""PE:P
/G 2et the input groups port handles G/
input2roupPorts M '4#A3C"2etChildren/andles9input2roup%
Rn4um'nputPorts%
'4P$"P+,""PE:P
/G #or the union transformation% on receiving a row of input% we need to
G output that row on the output group. G/
for 9i M HP i < n4um'nputPortsP iEE:
Q
'4#A3C"(etData9output2roupPortsKiL%
'4#A3C"2etDataDoid9input2roupPortsKiL::P
'4#A3C"(et'ndicator9output2roupPortsKiL%
'4#A3C"2et'ndicator9input2roupPortsKiL: :P
'4#A3C"(et*ength9output2roupPortsKiL%
'4#A3C"2et*ength9input2roupPortsKiL: :P
T
/G 5e -now there is only one output group for each partition G/
return '4#A3C"+utput4otification9output2roupsKHL:P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3eof4otification
Description. 4otification that the last row for an input group has already
!een seen. ,eturn '4#A3#A'*$,E if the session should fail as a result of
seeing this notification% '4#A3($CCE(( otherwise.
'nput. partition 7 the handle for the partition for the notification
group 7 the handle for the input group for the notification
+utput. 4one
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3eof4otification9 '4#A3C"3PA,"'"'+43/A4D*E
partition%
'4#A3C"3'4P$"2,+$P3/A4D*E group:
Q
'4#A3C"*ogMessageM9 eE(*3*+2%
Ounion3demo. An input group received an E+# notificationO:P
return '4#A3($CCE((P
T
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. p3union3data6dry4otification
Description. 4otification that a transaction has ended. "he data
!oundary type can either !e commit or roll!ac-.
,eturn '4#A3#A'*$,E if the session should fail as a result of
seeing this notification% '4#A3($CCE(( otherwise.
'nput. partition 7 the handle for the partition for the notification
transaction"ype 7 commit or roll!ac-
+utput. 4one
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( p3union3data6dry4otification 9 '4#A3C"3PA,"'"'+43/A4D*E
partition%
'4#A3C"3DA"A6D,3"PE transaction"ype:
Q
/G Do nothing G/
return '4#A3($CCE((P
T
/G /elper functions G/
/GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
#unction. validateProperties
Description. Dalidate that the transformation has all properties expected
!y a union transformation% such as at least one input group% and only
one output group. ,eturn '4#A3#A'*$,E if the session should fail since the
transformation was invalid% '4#A3($CCE(( otherwise.
'nput. partition 7 the handle for the partition
+utput. 4one
GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG/
'4#A3("A"$( validateProperties9const '4#A3C"3PA,"'"'+43/A4D*EG
partition:
Q
const '4#A3C"3'4P$"2,+$P3/A4D*EG input2roups M 4$**P
const '4#A3C"3+$"P$"2,+$P3/A4D*EG output2roups M 4$**P
si;e3t n4um'nput2roups M H% n4um+utput2roups M HP
const '4#A3C"3'4P$"P+,"3/A4D*EGG all'nput2roupsPorts M 4$**P
const '4#A3C"3+$"P$"P+,"3/A4D*EG output2roupPorts M 4$**P
si;e3t n4umPorts'n+utput2roup M HP
si;e3t i M H% n"emp4um'nputPorts M HP
/G 2et the input and output group handles G/
input2roups M '4#A3C"2etChildren/andles9partitionKHL%
Rn4um'nput2roups%
'4P$"2,+$P"PE:P
output2roups M '4#A3C"2etChildren/andles9partitionKHL%
Rn4um+utput2roups%
+$"P$"2,+$P"PE:P
/G A. 4um!er of input groups must !e =M 8 and num!er of output groups must
G !e e&ual to one. G/
if 9n4um'nput2roups < A UU n4um+utput2roups SM A:
Q
'4#A3C"*ogMessageM9 eE(*3E,,+,%
O$nionDemo. "here must !e at least two input groups O
Oand only one output groupO:P
return '4#A3#A'*$,EP
T
/G 8. Derify that the same num!er of ports are in each group 9including
G output group:. G/
output2roupPorts M '4#A3C"2etChildren/andles9output2roupsKHL%
Rn4umPorts'n+utput2roup%
+$"P$"P+,""PE:P
/G Allocate an array for all input groups ports G/
all'nput2roupsPorts M malloc9si;eof9'4#A3C"3'4P$"P+,"3/A4D*EG: G
n4um'nput2roups:P
for 9i M HP i < n4um'nput2roupsP iEE:
Q
all'nput2roupsPortsKiL M '4#A3C"2etChildren/andles9input2roupsKiL%
Rn"emp4um'nputPorts%
'4P$"P+,""PE:P
if 9 n4umPorts'n+utput2roup SM n"emp4um'nputPorts:
Q
'4#A3C"*ogMessageM9 eE(*3E,,+,%
O$nionDemo. "he num!er of ports in all input and O
Othe output group must !e the same.O:P
return '4#A3#A'*$,EP
T
T
free9all'nput2roupsPorts:P
/G @. Datatypes of ports in input group A must match data types of all other
G groups.
"+D+.G/
return '4#A3($CCE((P
T
Step ,! Build the 0odule
ou can !uild the module on a 5indows or $4') platform.
"a!le @7@ lists the li!rary file names for each platform when you !uild the module.
"a!le @7@. Module #ile 4ames
Platform Module #ile 4ame
5indows <module3identifier=.dll
A') li!<module3identifier=.a
/P7$) li!<module3identifier=.sl
*inux li!<module3identifier=.so
(olaris li!<module3identifier=.so
Building the 0odule on Windows
+n 5indows% use Microsoft Disual CEE to !uild the module.
"o !uild the module on 5indows.
2! (tart Disual CEE.
3! Clic- #ile = 4ew.
4!
'n the 4ew dialog !ox% clic- the Projects ta! and select the 5in@8 Dynamic7
*in- *i!rary option.
,! Enter its location.
'n the $nion example% enter <client3installation3directory=/")/$nionDemo.
5! Enter the name of the project.
ou must use the module name specified for the Multigroup External Procedure
transformation as the project name. 'n the $nion example% enter $nionDemo.
+! Clic- +C.
Disual CEE creates a wi;ard to help you define the project components.
6!
'n the wi;ard% select An empty D** project and clic- #inish. Clic- +C in the
4ew Project 'nformation dialog !ox.
Disual CEE creates the project files in the directory you specified.
9! Clic- Project = Add "o Project = #iles.
<!
4avigate up a directory level. "his directory contains the procedure files you
created. (elect all .c files and clic- +C.
'n the $nion example% add the following files.
m3$nionDemo.c
p3$nion.c
2=! Clic- Project = (ettings.
22! Clic- the C/CEE ta!% and select Preprocessor from the Category field.
23!
'n the Additional 'nclude Directories field% enter the following path and clic-
+C.
..P <PowerCenter3install3dir=VextprocVincludeVct
24! Clic- 6uild = 6uild <module3name=.dll or press #W to !uild the project.
Disual CEE creates the D** and places it in the de!ug or release directory under
the project directory.
Building the 0odule on "$>
+n $4')% use any C compiler to !uild the module.
"o !uild the module on $4').
2! Copy all C files and ma-efiles generated !y the Designer to the $4') machine.
$ote: 'f you !uild the shared li!rary on a machine other than the 'ntegration
(ervice machine% you must also copy the files in the following directory to the
!uild machine.
<PowerCenter3install3dir=VExtProcVincludeVct
'n the $nion example% copy all files in
<client3installation3directory=/")/$nionDemo.
3!
(et the environment varia!le '4#A3/+ME to the 'ntegration (ervice
installation directory.
$ote: 'f you specify an incorrect directory path for the '4#A3/+ME environment
varia!le% the 'ntegration (ervice cannot start.
4! Enter a command from "a!le @7? to ma-e the project.
"a!le @7?. $4') Commands to 6uild the
(hared *i!rary
$4')
Dersion
Command
A') 9@87
!it:
ma-e 7f ma-efile.aix
A') 9>?7
!it:
ma-e 7f ma-efile.aix>?
/P7$)
9@87!it:
ma-e 7f ma-efile.hp
/P7$)
9>?7!it:
ma-e 7f ma-efile.hp>?
/P7$)
PA7,'(C
ma-e 7f ma-efile.hpparisc>?
*inux ma-e 7f ma-efile.linux
(olaris ma-e 7f ma-efile.sol
'n this mapping% two sources with the same ports and datatypes connect to the
two input groups in the Multigroup External Procedure transformation. "he
Multigroup External Procedure transformation ta-es the rows from !oth sources
and outputs them all through its one output group. "he output group has the
same ports and datatypes as the input groups.
Step +! -un the Session in a Workflow
5hen you run the session% the 'ntegration (ervice loo-s for the shared li!rary or
D** in the runtime location you specify in the Multigroup External Procedure
transformation.
"o run a session in a wor-flow.
2! 'n the 5or-flow Manager% create a wor-flow.
3! Create a session for this mapping in the wor-flow.
4! Copy the shared li!rary or D** to the runtime location directory.
,! ,un the wor-flow containing the session.
5hen the 'ntegration (ervice loads a Multigroup External Procedure
transformation !ound to a procedure% it loads the D** or shared li!rary and calls
the procedure you define.
Custom Transformation :un#tions Overview
Custom transformations operate in conjunction with procedures you create
outside of the Designer to extend PowerCenter functionality. "he Custom
transformation functions allow you to develop the transformation logic in a
procedure you associate with a Custom transformation. PowerCenter provides
two sets of functions called generated and AP' functions. "he 'ntegration (ervice
uses generated functions to interface with the procedure. 5hen you create a
Custom transformation and generate the source code files% the Designer includes
the generated functions in the files. $se the AP' functions in the procedure code
to develop the transformation logic.
5hen you write the procedure code% you can configure it to receive a !loc- of
rows from the 'ntegration (ervice or a single row at a time. ou can increase the
procedure performance when it receives and processes a !loc- of rows.
Working with ?andles
Most functions are associated with a handle% such as
'4#A3C"3PA,"'"'+43/A4D*E. "he first parameter for these functions is the
handle the function affects. Multigroup External Procedure transformation
handles have a hierarchical relationship to each other. A parent handle has a A.n
relationship to its child handle.
#igure ?7A shows the Multigroup External Procedure transformation handles.
"a!le ?7A descri!es the Multigroup External Procedure transformation handles.
"a!le ?7A. Custom "ransformation /andles
/andle 4ame Description
'4#A3C"3M+D$*E3/A4D*E ,epresents the shared li!rary or D**. "he
procedure can only access the module
handle in its own shared li!rary or D**. 't
cannot access the module handle in any
other shared li!rary or D**.
'4#A3C"3P,+C3/A4D*E ,epresents a specific procedure within the
shared li!rary or D**.
ou might use this handle when you need
to write a function to affect a procedure
referenced !y multiple Multigroup External
Procedure transformations.
'4#A3C"3",A4(3/A4D*E ,epresents a specific Multigroup External
Procedure transformation instance in the
session.
'4#A3C"3PA,"'"'+43/A4D*E ,epresents a specific partition in a specific
Multigroup External Procedure
transformation instance.
'4#A3C"3'4P$"2,+$P3/A4D*E ,epresents an input group in a partition.
'4#A3C"3'4P$"P+,"3/A4D*E ,epresents an input port in an input group
in a partition.
'4#A3C"3+$"P$"2,+$P3/A4D*E,epresents an output group in a partition.
'4#A3C"3+$"P$"P+,"3/A4D*E ,epresents an output port in an output
group in a partition.
:un#tion -eferen#e
"he Custom transformation functions include generated and AP' functions.
"a!le ?78 lists the Custom transformation generated functions.
"a!le ?78. Custom "ransformation 2enerated #unctions
#unction Description
m3<module3name=3module'nit9: Module initiali;ation function.
p3<proc3name=3proc'nit9: Procedure initiali;ation function.
p3<proc3name=3partition'nit9: Partition initiali;ation function.
p3<proc3name=3input,ow4otification9: 'nput row notification function.
p3<proc3name=3data6dry4otification9: Data !oundary notification function.
p3<proc3name=3eof4otification9: End of file notification function.
p3<proc3name=3partitionDeinit9: Partition deinitiali;ation function.
p3<proc3name=3procedureDeinit9: Procedure deinitiali;ation function.
m3<module3name=3moduleDeinit9: Module deinitiali;ation function.
"a!le ?7@ lists the Custom transformation AP' functions.
"a!le ?7@. Custom "ransformation AP' #unctions
#unction Description
'4#A3C"(etDataAccessMode9: (et data access mode function.
'4#A3C"2etAncestor/andle9: 2et ancestor handle function.
'4#A3C"2etChildren/andles9: 2et children handles function.
'4#A3C"2et'nputPort/andle9: 2et input port handle function.
'4#A3C"2et+utputPort/andle9: 2et output port handle function.
'4#A3C"2et'nternalProperty<datatype=9: 2et internal property function.
'4#A3C"2etAllProperty4amesM9: 2et all property names in M6C(
mode function.
'4#A3C"2etAllProperty4ames$9: 2et all property names in $nicode
mode function.
'4#A3C"2etExternalProperty<datatype=M9: 2et external property in M6C(
function.
'4#A3C"2etExternalProperty<datatype=$9: 2et external property in $nicode
function.
'4#A3C",e!ind'nputData"ype9: ,e!ind input port datatype function.
'4#A3C",e!ind+utputData"ype9: ,e!ind output port datatype function.
'4#A3C"2etData<datatype=9: 2et data functions.
'4#A3C"(etData9: (et data functions.
'4#A3C"2et'ndicator9: 2et indicator function.
'4#A3C"(et'ndicator9: (et indicator function.
'4#A3C"2et*ength9: 2et length function.
'4#A3C"(et*ength9: (et length function.
'4#A3C"(etPass"hruPort9: (et pass7through port function.
'4#A3C"+utput4otification9: +utput notification function.
'4#A3C"Data6dry+utput4otification9: Data !oundary output notification
function.
'4#A3C"2etErrorMsg$9: 2et error message in $nicode
function.
'4#A3C"2etErrorMsgM9: 2et error message in M6C( function.
'4#A3C"*ogMessage$9: *og message in the session log in
$nicode function.
'4#A3C"*ogMessageM9: *og message in the session log in
M6C( function.
'4#A3C"'ncrementErrorCount9: 'ncrement error count function.
'4#A3C"'s"erminate,e&uested9: 's terminate re&uested function.
'4#A3C"6loc-'nput#low9: 6loc- input groups function.
'4#A3C"$n!loc-'nput#low9: $n!loc- input groups function.
'4#A3C"(et$serDefinedPtr9: (et user7defined pointer function.
'4#A3C"2et$serDefinedPtr9: 2et user7defined pointer function.
'4#A3C"Change(tringMode9: Change the string mode function.
'4#A3C"(etDataCodePage'D9: (et the data code page 'D function.
'4#A3C"2et,ow(trategy9: 2et row strategy function.
'4#A3C"(et,ow(trategy9: (et the row strategy function.
'4#A3C"ChangeDefault,ow(trategy9: Change the default row strategy of a
transformation.
"a!le ?7? lists the Custom transformation array7!ased functions.
"a!le ?7?. Custom "ransformation Array76ased AP' #unctions
#unction Description
'4#A3C"A2et'nput,owMax9: 2et maximum num!er of input rows function.
'4#A3C"A2et+utput,owMax9: 2et maximum num!er of output rows function.
'4#A3C"A(et+utput,owMax9: (et maximum num!er of output rows function.
'4#A3C"A2et4um,ows9: 2et num!er of rows function.
'4#A3C"A(et4um,ows9: (et num!er of rows function.
'4#A3C"A's,owDalid9: 's row valid function.
'4#A3C"A2etData<datatype=9: 2et data functions.
'4#A3C"A2et'ndicator9: 2et indicator function.
'4#A3C"A(etData9: (et data function.
'4#A3C"A2et,ow(trategy9: 2et row strategy function.
'4#A3C"A(et,ow(trategy9: (et row strategy function.
'4#A3C"A(et'nputError,owM9: (et input error row function for M6C(.
Working with -ows
"he 'ntegration (ervice can pass a single row to a Multigroup External Procedure
transformation procedure or a !loc- of rows in an array. ou can write the
procedure code to specify whether the procedure receives one row or a !loc- of
rows. ou can increase performance when the procedure receives a !loc- of
rows.
ou can decrease the num!er of function calls the 'ntegration (ervice and
procedure ma-e. "he 'ntegration (ervice calls the input row notification function
fewer times% and the procedure calls the output notification function fewer times.
ou can increase the locality of memory access space for the data.
ou can write the procedure code to perform an algorithm on a !loc- of data
instead of each row of data.
6y default% the procedure receives a row of data at a time. "o receive a !loc- of
rows% you must include the '4#A3C"(etDataAccessMode9: function to change
the data access mode to array7!ased. 5hen the data access mode is array7
!ased% you must use the array7!ased data handling and row strategy functions to
access and output the data. 5hen the data access mode is row7!ased% you must
use the row7!ased data handling and row strategy functions to access and output
the data.
All array7!ased functions use the prefix '4#A3C"A. All other functions use the
prefix '4#A3C".
$se the following steps to write the procedure code to access a !loc- of rows.
A.
Call '4#A3C"(etDataAccessMode9: during the procedure initiali;ation% to
change the data access mode to array7!ased.
8.
5hen you create a passive Multigroup External Procedure transformation% you
can also call '4#A3C"(etPass"hruPort9: during procedure initiali;ation to pass
through the data for input/output ports.
5hen a !loc- of data reaches the Multigroup External Procedure transformation
procedure% the 'ntegration (ervice calls p3<proc3name=3input,ow4otification9:
for each !loc- of data. Perform the rest of the steps inside this function.
@.
Call '4#A3C"A2et4um,ows9: using the input group handle in the input row
notification function to find the num!er of rows in the current !loc-.
?.
Call one of the '4#A3C"A2etData<datatype=9: functions using the input port
handle to get the data for a particular row in the !loc-.
B. Call '4#A3C"A(etData to output rows in a !loc-.
>.
6efore calling '4#A3C"+utput4otification9:% call '4#A3C"A(et4um,ows9: to
notify the 'ntegration (ervice of the num!er of rows the procedure is outputting
in the !loc-.
W. Call '4#A3C"+utput4otification9:.
-ules and .uidelines
$se the following rules and guidelines when you write the procedure code to use
either row7!ased or array7!ased data access mode.
'n row7!ased mode% you can return '4#A3,+5E,,+, in the input row
notification function to indicate the function encountered an error for the row of
data on input. "he 'ntegration (ervice increments the internal error count.
'n array7!ased mode% do not return '4#A3,+5E,,+, in the input row
notification function. "he 'ntegration (ervice treats that as a fatal error. 'f you
need to indicate a row in a !loc- has an error% call the
'4#A3C"A(et'nputError,owM9: or '4#A3C"A(et'nputError,ow$9: function.
'n row7!ased mode% the 'ntegration (ervice only passes valid rows to the
procedure.
'n array7!ased mode% an input !loc- may contain invalid rows% such as dropped%
filtered% or error rows. Call '4#A3C"A's,owDalid9: to determine if a row in a
!loc- is valid.
'n array7!ased mode% do not call '4#A3C"A(et4um,ows9: for a passive
Multigroup External Procedure transformation. ou can call this function for
active Multigroup External Procedure transformations.
'n array7!ased mode% call '4#A3C"+utput4otification9: once.
'n array7!ased mode% you can call '4#A3C"(etPass"hruPort9: only for passive
Multigroup External Procedure transformations.
'n array7!ased mode for passive Multigroup External Procedure
transformations% you must output all rows in an output !loc-% including any error
row.
.enerated :un#tions
5hen you use the Designer to generate the procedure code% the Designer
includes a set of functions called generated functions in the
m3<module3name=.c and p3<procedure3name=.c files. "he 'ntegration (ervice
uses the generated functions to interface with the procedure. 5hen you run a
session% the 'ntegration (ervice calls these generated functions in the following
order for each target load order group in the mapping.
A. 'nitiali;ation functions
8. 4otification functions
@. Deinitiali;ation functions
nitiali/ation :un#tions
"he 'ntegration (ervice first calls the initiali;ation functions. $se the initiali;ation
functions to write processes you want the 'ntegration (ervice to run !efore it
passes data to the Custom transformation. 5riting code in the initiali;ation
functions reduces processing overhead !ecause the 'ntegration (ervice runs
these processes only once for a module% procedure% or partition.
"he Designer generates the following initiali;ation functions.
m3<module3name=3module'nit9:
p3<proc3name=3proc'nit9:
p3<proc3name=3partition'nit9:
0odule nitiali/ation :un#tion
"he 'ntegration (ervice calls the m3<module3name=3module'nit9: function
during session initiali;ation% !efore it runs the pre7session tas-s. 't calls this
function% once for a module% !efore all other functions.
'f you want the 'ntegration (ervice to run a specific process when it loads the
module% you must include it in this function. #or example% you might write code to
create glo!al structures that procedures within this module access.
$se the following syntax.
'4#A3("A"$( m3<module3name=3module'nit9'4#A3C"3M+D$*E3/A4D*E
module:P
Argument Datatype 'nput/
+utput
Description
module '4#A3C"3M+D$*E3/A4D*E'nput Module handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
Pro#edure nitiali/ation :un#tion
"he 'ntegration (ervice calls p3<proc3name=3proc'nit9: function during session
initiali;ation% !efore it runs the pre7session tas-s and after it runs the module
initiali;ation function. "he 'ntegration (ervice calls this function once for each
procedure in the module.
5rite code in this function when you want the 'ntegration (ervice to run a
process for a particular procedure. ou can also enter some AP' functions in the
procedure initiali;ation function% such as navigation and property functions.
$se the following syntax.
'4#A3("A"$( p3<proc3name=3proc'nit9'4#A3C"3P,+CED$,E3/A4D*E
procedure:P
Argument Datatype 'nput/
+utput
Description
procedure '4#A3C"3P,+CED$,E3/A4D*E'nput Procedure handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
Partition nitiali/ation :un#tion
"he 'ntegration (ervice calls p3<proc3name=3partition'nit9: function !efore it
passes data to the Custom transformation. "he 'ntegration (ervice calls this
function once for each partition at a Custom transformation instance.
'f you want the 'ntegration (ervice to run a specific process !efore it passes data
through a partition of the Custom transformation% you must include it in this
function.
$se the following syntax.
'4#A3("A"$( p3<proc3name=3partition'nit9'4#A3C"3PA,"'"'+43/A4D*E
transformation:P
Argument Datatype 'nput/
+utput
Description
transformation '4#A3C"3PA,"'"'+43/A4D*E'nput Partition handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
$ote: 5hen the Multigroup External Procedure transformation re&uires one
thread for each partition% you can include thread7specific operations in the
partition initiali;ation function.
$otifi#ation :un#tions
"he 'ntegration (ervice calls the notification functions when it passes a row of
data to the Custom transformation.
"he Designer generates the following notification functions.
p3<proc3name=3input,ow4otification9:
p3<proc3name=3data6dry,ow4otification9:
p3<proc3name=3eof4otification9:
$ote: 5hen the Multigroup External Procedure transformation re&uires one
thread for each partition% you can include thread7specific operations in the
notification functions.
nput -ow $otifi#ation :un#tion
"he 'ntegration (ervice calls the p3<proc3name=3input,ow4otification9: function
when it passes a row or a !loc- of rows to the Custom transformation. 't notes
which input group and partition receives data through the input group handle and
partition handle.
$se the following syntax.
'4#A3,+5("A"$(
p3<proc3name=3input,ow4otification9'4#A3C"3PA,"'"'+43/A4D*E
Partition% '4#A3C"3'4P$"2,+$P3/A4D*E group:P
Argument Datatype 'nput/
+utput
Description
partition '4#A3C"3PA,"'"'+43/A4D*E 'nput Partition handle.
group '4#A3C"3'4P$"2,+$P3/A4D*E'nput 'nput group handle.
"he datatype of the return value is '4#A3,+5("A"$(. $se the following
values for the return value.
$:A&-OWS"CC1SS! 'ndicates the function successfully processed the row of
data.
$:A&-OW1--O-! 'ndicates the function encountered an error for the row of
data. "he 'ntegration (ervice increments the internal error count. +nly return
this value when the data access mode is row.
'f the input row notification function returns '4#A3,+5E,,+, in array7!ased
mode% the 'ntegration (ervice treats it as a fatal error. 'f you need to indicate a
row in a !loc- has an error% call the '4#A3C"A(et'nputError,owM9: or
'4#A3C"A(et'nputError,ow$9: function.
$:A&:ATA;1--O-! 'ndicates the function encountered a fatal error for the
row of data or the !loc- of data. "he 'ntegration (ervice fails the session.
%ata Boundary $otifi#ation :un#tion
"he 'ntegration (ervice calls the p3<proc3name=3data6dry4otification9: function
when it passes a commit or roll!ac- row to a partition.
$se the following syntax.
'4#A3("A"$(
p3<proc3name=3data6dry4otification9'4#A3C"3PA,"'"'+43/A4D*E
transformation% '4#A3C"Data6dry"ype data6oundary"ype:P
Argument Datatype 'nput/
+utput
Description
transformation '4#A3C"3PA,"'"'+43/A4D*E'nput Partition handle.
data6oundary"ype '4#A3C"Data6dry"ype 'nput 'ntegration (ervice
uses one of the
following values for
the
data6oundary"ype
parameter.
7
e6"3C+MM'"
7
eBT_ROLLBACK
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
1nd Of :ile $otifi#ation :un#tion
"he 'ntegration (ervice calls the p3<proc3name=3eof4otification9: function after
it passes the last row to a partition in an input group.
$se the following syntax.
'4#A3("A"$(
p3<proc3name=3eof4otification9'4#A3C"3PA,"'"'+43/A4D*E
transformation% '4#A3C"3'4P$"2,+$P3/A4D*E group:P
Argument Datatype 'nput/
+utput
Description
transformation '4#A3C"3PA,"'"'+43/A4D*E 'nput Partition handle.
group '4#A3C"3'4P$"2,+$P3/A4D*E'nput 'nput group handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
%einitiali/ation :un#tions
"he 'ntegration (ervice calls the deinitiali;ation functions after it processes data
for the Custom transformation. $se the deinitiali;ation functions to write
processes you want the 'ntegration (ervice to run after it passes all rows of data
to the Custom transformation.
"he Designer generates the following deinitiali;ation functions.
p3<proc3name=3partitionDeinit9:
p3<proc3name=3procDeinit9:
m3<module3name=3moduleDeinit9:
$ote: 5hen the Multigroup External Procedure transformation re&uires one
thread for each partition% you can include thread7specific operations in the
initiali;ation and deinitiali;ation functions.
Partition %einitiali/ation :un#tion
"he 'ntegration (ervice calls the p3<proc3name=3partitionDeinit9: function after
it calls the p3<proc3name=3eof4otification9: or
p3<proc3name=3a!ort4otification9: function. "he 'ntegration (ervice calls this
function once for each partition of the Custom transformation.
$se the following syntax.
'4#A3("A"$(
p3<proc3name=3partitionDeinit9'4#A3C"3PA,"'"'+43/A4D*E partition:P
Argument Datatype 'nput/
+utput
Description
partition '4#A3C"3PA,"'"'+43/A4D*E'nput Partition handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
$ote: 5hen the Multigroup External Procedure transformation re&uires one
thread for each partition% you can include thread7specific operations in the
partition deinitiali;ation function.
Pro#edure %einitiali/ation :un#tion
"he 'ntegration (ervice calls the p3<proc3name=3procDeinit9: function after it
calls the p3<proc3name=3partitionDeinit9: function for all partitions of each
Custom transformation instance that uses this procedure in the mapping.
$se the following syntax.
'4#A3("A"$( p3<proc3name=3procDeinit9'4#A3C"3P,+CED$,E3/A4D*E
procedure% '4#A3("A"$( session(tatus:P
Argument Datatype 'nput/
+utput
Description
procedure '4#A3C"3P,+CED$,E3/A4D*E'nput Procedure handle.
session(tatus '4#A3("A"$( 'nput 'ntegration (ervice
uses one of the
following values for the
session(tatus
parameter.
7
'4#A3($CCE((.
'ndicates the session
succeeded.
7
I!A_!AIL"R#.
Indicates the session
failed.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
0odule %einitiali/ation :un#tion
"he 'ntegration (ervice calls the m3<module3name=3moduleDeinit9: function
after it runs the post7session tas-s. 't calls this function% once for a module% after
all other functions.
$se the following syntax.
'4#A3("A"$(
m3<module3name=3moduleDeinit9'4#A3C"3M+D$*E3/A4D*E module%
'4#A3("A"$( session(tatus:P
Argument Datatype 'nput/
+utput
Description
module '4#A3C"3M+D$*E3/A4D*E'nput Module handle.
session(tatus '4#A3("A"$( 'nput 'ntegration (ervice uses one
of the following values for
the session(tatus
parameter.
7
'4#A3($CCE((. 'ndicates
the session succeeded.
7
I!A_!AIL"R#. Indicates
the session failed.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value. 5hen the function returns '4#A3#A'*$,E%
the 'ntegration (ervice fails the session.
$avigation :un#tions
$se the navigation functions when you want the procedure to navigate through
the handle hierarchy.
PowerCenter provides the following navigation functions.
'4#A3C"2etAncestor/andle9:
'4#A3C"2etChildren/andles9:
'4#A3C"2et'nputPort/andle9:
'4#A3C"2et+utputPort/andle9:
.et An#estor ?andle :un#tion
$se the '4#A3C"2etAncestor/andle9: function when you want the procedure to
access a parent handle of a given handle.
$se the following syntax.
'4#A3C"3/A4D*E '4#A3C"2etAncestor/andle9'4#A3C"3/A4D*E handle%
'4#A3C"/andle"ype return/andle"ype:P
Argument Datatype 'nput/
+utput
Description
/andle '4#A3C"3/A4D*E 'nput /andle name.
return/andle"ype'4#A3C"/andle"yp
e
'nput ,eturn handle type.
$se the following values for
the return/andle"ype
parameter.
7
P,+CED$,E"PE
7
",A4(#+,MA"'+4"P
E
7PA,"'"'+4"PE
7
'4P$"2,+$P"PE
7
+$"P$"2,+$P"PE
7
'4P$"P+,""PE
7
O"T$"T$ORTT%$#
"he handle parameter specifies the handle whose parent you want the procedure
to access. "he 'ntegration (ervice returns '4#A3C"3/A4D*E if you specify a
valid handle in the function. +therwise% it returns a null value.
"o avoid compilation errors% you must code the procedure to set a handle name
to the return value.
#or example% you can enter the following code.
'4#A3C"3M+D$*E3/A4D*E module M
'4#A3C"2etAncestor/andle9procedure/andle% '4#A3C"3/andle"ype:P
.et Children ?andles :un#tion
$se the '4#A3C"2etChildren/andles9: function when you want the procedure to
access the children handles of a given handle.
$se the following syntax.
'4#A3C"3/A4D*EG '4#A3C"2etChildren/andles9'4#A3C"3/A4D*E handle%
si;e3tG pnChildren/andles% '4#A3C"/andle"ype return/andle"ype:P
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3/A4D*E 'nput /andle name.
pnChildren/andle
s
si;e3tG +utput 'ntegration (ervice returns
an array of children
handles. "he
pnChildren/andles
parameter indicates the
num!er of children handles
in the array.
return/andle"ype '4#A3C"/andle"yp
e
'nput $se the following values
for the return/andle"ype
parameter.
7
P,+CED$,E"PE
7",A4(#+,MA"'+4"P
E
7
PA,"'"'+4"PE
7
'4P$"2,+$P"PE
7
+$"P$"2,+$P"PE
7
'4P$"P+,""PE
7
O"T$"T$ORTT%$#
"he handle parameter specifies the handle whose children you want the
procedure to access. "he 'ntegration (ervice returns '4#A3C"3/A4D*EG when
you specify a valid handle in the function. +therwise% it returns a null value.
"o avoid compilation errors% you must code the procedure to set a handle name
to the returned value.
#or example% you can enter the following code.
'4#A3C"3PA,"'"'+43/A4D*E partition M
'4#A3C"2etChildren/andles9procedure/andle% pnChildren/andles%
'4#A3C"3PA,"'"'+43/A4D*E3"PE:P
.et Port ?andle :un#tions
"he 'ntegration (ervice associates the '4#A3C"3'4P$"P+,"3/A4D*E with
input and input/output ports% and the '4#A3C"3+$"P$"P+,"3/A4D*E with
output and input/output ports.
PowerCenter provides the following get port handle functions.
$:A&CT.etnputPort?andle@A! $se this function when the procedure -nows
the output port handle for an input/output port and needs the input port handle.
$se the following syntax.
'4#A3C"'4#A3C"3'4P$"P+,"3/A4D*E
'4#A3C"2et'nputPort/andle9'4#A3C"3+$"P$"P+,"3/A4D*E
outputPort/andle:P
Argument Datatype 'nput/
+utput
Description
outputPort/andle '4#A3C"3+$"P$"P+,"3/A4D*Einput +utput port
handle.
$:A&CT.etOutputPort?andle@A! $se this function when the procedure -nows
the input port handle for an input/output port and needs the output port handle.
$se the following syntax.
'4#A3C"3+$"P$"P+,"3/A4D*E
'4#A3C"2et+utputPort/andle9'4#A3C"3'4P$"P+,"3/A4D*E
inputPort/andle:P
Argument Datatype 'nput/
+utput
Description
inputPort/andle '4#A3C"3'4P$"P+,"3/A4D*Einput 'nput port
handle.
"he 'ntegration (ervice returns 4$** when you use the get port handle functions
with input or output ports.
Property :un#tions
$se the property functions when you want the procedure to access the Custom
transformation properties. "he property functions access properties on the
following ta!s of the Custom transformation.
Ports
Properties
'nitiali;ation Properties
Metadata Extensions
Port Attri!ute Definitions
$se the following property functions in initiali;ation functions.
'4#A3C"2et'nternalProperty<datatype=9:
'4#A3C"2etAllProperty4amesM9:
'4#A3C"2etAllProperty4ames$9:
'4#A3C"2etExternalProperty<datatype=M9:
'4#A3C"2etExternalProperty<datatype=$9:
.et nternal Property :un#tion
PowerCenter provides functions to access the port attri!utes specified on the
ports ta!% and properties specified for attri!utes on the Properties ta! of the
Custom transformation.
"he 'ntegration (ervice associates each port and property attri!ute with a
property 'D. ou must specify the property 'D in the procedure to access the
values specified for the attri!utes. #or the handle parameter% specify a handle
name from the handle hierarchy. "he 'ntegration (ervice fails the session if the
handle name is invalid.
$se the following functions when you want the procedure to access the
properties.
$:A&CT.etnternalPropertyString0@A! Accesses a value of type string in
M6C( for a given property 'D.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et'nternalProperty(tringM9 '4#A3C"3/A4D*E
handle% si;e3t prop'd% const charGG psPropDalue :P
$:A&CT.etnternalPropertyString"@A! Accesses a value of type string in
$nicode for a given property 'D.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et'nternalProperty(tring$9 '4#A3C"3/A4D*E
handle% si;e3t prop'd% const '4#A3$4'C/A,GG psPropDalue :P
$:A&CT.etnternalPropertynt43@A! Accesses a value of type integer for a
given property 'D.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et'nternalProperty'nt@89 '4#A3C"3/A4D*E handle%
si;e3t prop'd% '4#A3'4"@8G pnPropDalue :P
$:A&CT.etnternalPropertyBool@A! Accesses a value of type 6oolean for a
given property 'D.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et'nternalProperty6ool9 '4#A3C"3/A4D*E handle%
si;e3t prop'd% '4#A36++*E4G p!PropDalue :P
$:A&CT.etnternalProperty$:A&PT-@A! Accesses a pointer to a value for a
given property 'D.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et'nternalProperty'4#A3P",9 '4#A3C"3/A4D*E
handle% si;e3t prop'd% '4#A3P",G pvPropDalue :P
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
Port and Property Attribute Property %s
"he following ta!les list the property 'Ds for the port and property attri!utes in the
Custom transformation. Each ta!le lists a Custom transformation handle and the
property 'Ds you can access with the handle in a property function.
"a!le ?7B lists '4#A3C"3M+D$*E 3/A4D*E property 'Ds.
"a!le ?7B. '4#A3C"3M+D$*E Property 'Ds
/andle Property 'D Dataty
pe
Description
'4#A3C"3M+D$*E34AME (tring (pecifies the module name.
'4#A3C"3(E(('+43'4#A3DE,(
'+4
(tring (pecifies the 'nformatica
version.
'4#A3C"3(E(('+43C+DE3PA2
E
'nteger (pecifies the 'ntegration (ervice
code page.
'4#A3C"3(E(('+43DA"AM+DE
ME4"3M+DE
'nteger (pecifies the data movement
mode. "he 'ntegration (ervice
returns one of the following
values.
7
eA(M3M6C(
7
eA&'_"ICO(#
'4#A3C"3(E(('+43DA*'DA"E3
C+DEPA2E
6oolea
n
(pecifies whether the 'ntegration
(ervice enforces code page
validation.
'4#A3C"3(E(('+43P,+D3'4(
"A**3D',
(tring (pecifies the 'ntegration (ervice
installation directory.
'4#A3C"3(E(('+43/'2/3P,E
C'('+43M+DE
6oolea
n
(pecifies whether session is
configured for high precision.
'4#A3C"3M+D$*E3,$4"'ME3D
',
(tring (pecifies the runtime directory
for the D** or shared li!rary.
'4#A3C"3(E(('+43'(3$PD3("
,3A**+5ED
6oolea
n
(pecifies whether the $pdate
(trategy "ransformation
property is selected in the
transformation.
'4#A3C"3",A4(3+$"P$"3'(3
,EPEA"A6*E
'nteger (pecifies whether the Multigroup
External Procedure
transformation produces data in
the same order in every session
run. "he 'ntegration (ervice
returns one of the following
values.
7
e+$",EPEA"34EDE, M A
7
e+$",EPEA"3A*5A( M 8
7
eO"TR#$#AT_BA&#(_O_I
$"T_OR(#R ) *
'4#A3C"3",A4(3#A"A*3E,,+
,
6oolea
n
(pecifies if the Custom
"ransformation caused a fatal
error. "he 'ntegration (ervice
returns one of the following
values.
7
'4#A3",$E
7I!A_!AL&#
"a!le ?7> lists '4#A3C"3P,+C3/A4D*E property 'Ds.
"a!le ?7>. '4#A3C"3P,+C3/A4D*E Property 'Ds
/andle Property 'D Datatype Description
'4#A3C"3P,+CED$,E34AME(tring (pecifies the Custom
transformation procedure
name.
"a!le ?7W lists '4#A3C"3",A4(3/A4D*E property 'Ds.
"a!le ?7W. '4#A3C"3",A4(3/A4D*E Property 'Ds
/andle Property 'D Datatyp
e
Description
'4#A3C"3",A4(3'4("A4CE
34AME
(tring (pecifies the Custom
transformation instance name.
'4#A3C"3",A4(3",ACE3*E
DE*
'nteger (pecifies the tracing level. "he
'ntegration (ervice returns one of
the following values.
7
e",ACE3"E,(E
7
e",ACE34+,MA*
7
e",ACE3DE,6+(E3'4'"
7
eTRAC#_+#RBO&#_(ATA
'4#A3C"3",A4(3MA36*+C
C3DA"A
6oolea
n
(pecifies if the 'ntegration (ervice
allows the procedure to !loc- input
data in the current session.
'4#A3C"3",A4(3M$("36*+
CC3DA"A
6oolea
n
(pecifies if the 'nputs Must 6loc-
Custom transformation property is
selected.
'4#A3C"3",A4(3'(AC"'DE 6oolea
n
(pecifies whether the Custom
transformation is an active or
passive transformation.
'4#A3C"3",A4(3'(PA,"'"'
+4A6*E
6oolea
n
(pecifies if you can partition
sessions that use this Custom
transformation.
'4#A3C"3",A4(3'(3$PDA"
E3
(",A"E2
6oolea
n
(pecifies if the Custom
transformation !ehaves li-e an
$pdate (trategy transformation.
'4#A3C"3",A4(3DE#A$*"3
$PDA"E3
(",A"E2
'nteger (pecifies the default update
strategy.
7eD$(3'4(E,"
7
eD$(3$PDA"E
7
eD$(3DE*E"E
7
eD$(3,E0EC"
7
e("&_$A&&T,RO"-,
'4#A3C"3",A4(34$M3PA,"
'"'+4(
'nteger (pecifies the num!er of partitions
in the sessions that use this
Custom transformation.
'4#A3C"3",A4(3DA"AC+D
EPA2E
'nteger (pecifies the code page in which
the 'ntegration (ervice passes
data to the Custom transformation.
$se the set data code page
function if you want the Custom
transformation to access data in a
different code page.
'4#A3C"3",A4(3",A4(#+,
M3
(C+PE
'nteger (pecifies the transformation scope
in the Custom transformation. "he
'ntegration (ervice returns one of
the following values.
7
e"(3,+5
7
e"(3",A4(AC"'+4
7
eT&_ALLI$"T
'4#A3C"3",A4(32E4E,A"E
3
",A4(AC"
6oolea
n
(pecifies if the 2enerate
"ransaction property is ena!led.
"he 'ntegration (ervice returns
one of the following values.
7
'4#A3",$E
7
I!A_!AL&#
'4#A3C"3",A4(3+$"P$"3'
(3
,EPEA"A6*E
'nteger (pecifies whether the Multigroup
External Procedure transformation
produces data in the same order in
every session run. "he 'ntegration
(ervice returns one of the following
values.
7
e+$",EPEA"34EDE, M A
7
e+$",EPEA"3A*5A( M 8
7eO"TR#$#AT_BA&#(_O_I$
"T_OR(#R ) *
'4#A3C"3",A4(3#A"A*3E,
,+,
6oolea
n
(pecifies if the Custom
"ransformation caused a fatal
error. "he 'ntegration (ervice
returns one of the following values.
7
'4#A3",$E
7
I!A_!AL&#
"a!le ?7J lists '4#A3C"3'4P$"32,+$P3/A4D*E and
'4#A3C"3+$"P$"32,+$P3/A4D*E property 'Ds.
"a!le ?7J. '4#A3C"3'4P$"32,+$P% '4#A3C"3+$"P$"32,+$P
Property 'Ds
/andle Property 'D DatatypeDescription
'4#A3C"32,+$P34AME (tring (pecifies the group name.
'4#A3C"32,+$P34$M3P+,"
(
'nteger (pecifies the num!er of ports in
the group.
'4#A3C"32,+$P3'(C+44EC
"ED
6oolean (pecifies if all ports in a group
are connected to another
transformation.
'4#A3C"3P+,"34AME (tring (pecifies the port name.
'4#A3C"3P+,"3CDA"A"PE 'nteger (pecifies the port datatype. "he
'ntegration (ervice returns one
of the following values.
7
e'4#A3C"PE3(/+,"
7
e'4#A3C"PE3'4"@8
7
e'4#A3C"PE3C/A,
7
e'4#A3C"PE3,A5
7
e'4#A3C"PE3$4'C/A,
7
e'4#A3C"PE3"'ME
7
e'4#A3C"PE3#*+A"
7
e'4#A3C"PE3D+$6*E
7
e'4#A3C"PE3DEC'MA*AJ
3#')ED
7
e'4#A3C"PE3DEC'MA*8J3#
')ED
7eI!A_CT%$#_I!A_CT(A
T#TI'#
'4#A3C"3P+,"3P,EC'('+4 'nteger (pecifies the port precision.
'4#A3C"3P+,"3(CA*E 'nteger (pecifies the port scale 9if
applica!le:.
'4#A3C"3P+,"3'(3MAPPED 6oolean (pecifies whether the port is
lin-ed to other transformations in
the mapping.
'4#A3C"3P+,"3("+,A2E('X
E
'nteger (pecifies the internal storage
si;e of the data for a port. "he
storage si;e depends on the
datatype of the port.
'4#A3C"3P+,"36+$4DDA"A
"PE
'nteger (pecifies the port datatype. $se
instead of
'4#A3C"3P+,"3CDA"A"PE
if you re!ind the port and specify
a datatype other than the
default.
"a!le ?7Y lists '4#A3C"3'4P$"P+,"3/A4D*E and
'4#A3C"3+$"P$"3/A4D*E property 'Ds.
"a!le ?7Y. '4#A3C"3'4P$"P+,"% '4#A3C"3+$"P$"P+,"3/A4D*E
Property 'Ds
/andle Property 'D DatatypeDescription
'4#A3C"3P+,"34AME (tring (pecifies the port name.
'4#A3C"3P+,"3CDA"A"PE 'nteger (pecifies the port datatype. "he
'ntegration (ervice returns one
of the following values.
7
e'4#A3C"PE3(/+,"
7
e'4#A3C"PE3'4"@8
7
e'4#A3C"PE3C/A,
7
e'4#A3C"PE3,A5
7
e'4#A3C"PE3$4'C/A,
7
e'4#A3C"PE3"'ME
7
e'4#A3C"PE3#*+A"
7
e'4#A3C"PE3D+$6*E
7
e'4#A3C"PE3DEC'MA*AJ
3#')ED
7e'4#A3C"PE3DEC'MA*8J3#
')ED
7
eI!A_CT%$#_I!A_CT(A
T#TI'#
'4#A3C"3P+,"3P,EC'('+4 'nteger (pecifies the port precision.
'4#A3C"3P+,"3(CA*E 'nteger (pecifies the port scale% if
applica!le.
'4#A3C"3P+,"3'(3MAPPED 6oolean (pecifies whether the port is
lin-ed to other transformations in
the mapping.
'4#A3C"3P+,"3("+,A2E('X
E
'nteger (pecifies the internal storage
si;e of the data for a port. "he
storage si;e depends on the
datatype of the port.
'4#A3C"3P+,"36+$4DDA"A
"PE
'nteger (pecifies the port datatype. $se
instead of
'4#A3C"3P+,"3CDA"A"PE
if you re!ind the port and specify
a datatype other than the
default.
.et All 1)ternal Property $ames @0BCS or "ni#odeA
PowerCenter provides two functions to access the property names defined on
the Metadata Extensions ta!% 'nitiali;ation Properties ta!% and Port Attri!ute
Definitions ta! of the Custom transformation.
$se the following functions when you want the procedure to access the property
names.
$:A&CT.etAllProperty$ames0@A! Accesses the property names in M6C(.
$se the following syntax.
'4#A3("A"$( '4#A3C"2etAllProperty4amesM9'4#A3C"3/A4D*E handle%
const charGconstGG paProperty4ames% si;e3tG pnProperties:P
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3/A4D*E'nput (pecify the handle name.
paProperty4ames const charGconstGG +utput (pecifies the property name.
"he 'ntegration (ervice
returns an array of property
names in M6C(.
pnProperties si;e3tG +utput 'ndicates the num!er of
properties in the array.
$:A&CT.etAllProperty$ames"@A! Accesses the property names in $nicode.
$se the following syntax.
'4#A3("A"$( '4#A3C"2etAllProperty4ames$9'4#A3C"3/A4D*E handle%
const '4#A3$4'C/A,GconstGG pasProperty4ames% si;e3tG pnProperties:P
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3/A4D*E 'nput (pecify the handle
name.
paProperty4ames const
'4#A3$4'C/A,GconstGG
+utput (pecifies the property
name. "he 'ntegration
(ervice returns an
array of property
names in $nicode.
pnProperties si;e3tG +utput 'ndicates the num!er
of properties in the
array.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
.et 1)ternal Properties @0BCS or "ni#odeA
PowerCenter provides functions to access the values of the properties defined on
the Metadata Extensions ta!% 'nitiali;ation Properties ta!% or Port Attri!ute
Definitions ta! of the Custom transformation.
ou must specify the property names in the functions if you want the procedure
to access the values. $se the '4#A3C"2etAllProperty4amesM9: or
'4#A3C"2etAllProperty4ames$9: functions to access property names. #or the
handle parameter% specify a handle name from the handle hierarchy. "he
'ntegration (ervice fails the session if the handle name is invalid.
$ote: 'f you define an initiali;ation property with the same name as a metadata
extension% the 'ntegration (ervice returns the metadata extension value.
$se the following functions when you want the procedure to access the values of
the properties.
$:A&CT.et1)ternalProperty'datatype(0@A! Accesses the value of the
property in M6C(. $se the syntax as shown in "a!le ?7AH.
"a!le ?7AH. Property #unctions 9M6C(:
(yntax Property
Datatype
'4#A3("A"$(
'4#A3C"2etExternalProperty(tringM9'4#A3C"3/A4D*E
handle% const charG sProp4ame% const charGG psPropDalue:P
(tring
'4#A3("A"$(
'4#A3C"2etExternalProperty'4"@8M9'4#A3C"3/A4D*E
'nteger
handle% const charG sProp4ame% '4#A3'4"@8G pnPropDalue:P
'4#A3("A"$(
'4#A3C"2etExternalProperty6oolM9'4#A3C"3/A4D*E
handle% const charG sProp4ame% '4#A36++*E4G
p!PropDalue:P
6oolean
$:A&CT.et1)ternalProperty'datatype("@A! Accesses the value of the
property in $nicode. $se the syntax as shown in "a!le ?7AA.
"a!le ?7AA. Property :un#tions @"ni#odeA
(yntax Property
Datatype
'4#A3("A"$(
'4#A3C"2etExternalProperty(tring$9'4#A3C"3/A4D*E
handle% '4#A3$4'C/A,G sProp4ame% '4#A3$4'C/A,GG
psPropDalue:P
(tring
'4#A3("A"$(
'4#A3C"2etExternalProperty(tring$9'4#A3C"3/A4D*E
handle% '4#A3$4'C/A,G sProp4ame% '4#A3'4"@8G
pnPropDalue:P
'nteger
'4#A3("A"$(
'4#A3C"2etExternalProperty(tring$9'4#A3C"3/A4D*E
handle% '4#A3$4'C/A,G sProp4ame% '4#A36++*E4G
p!PropDalue:P
6oolean
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
-ebind %atatype :un#tions
ou can re!ind a port with a datatype other than the default datatype with
PowerCenter. $se the re!ind datatype functions if you want the procedure to
access data in a datatype other than the default datatype. ou must re!ind the
port with a compati!le datatype.
ou can only use these functions in the initiali;ation functions.
Consider the following rules when you re!ind the datatype for an output or
input/output port.
ou must use the data handling functions to set the data and the indicator for
that port. $se the '4#A3C"(etData9: and '4#A3C"(et'ndicator9: functions in
row7!ased mode% and use the '4#A3C"A(etData9: function in array7!ased
mode.
Do not call the '4#A3C"(etPass"hruPort9: function for the output port.
"a!le ?7A8 lists compati!le datatypes.
"a!le ?7A8. Compati!le Datatypes
Default Datatype Compati!le 5ith
Char $nichar
$nichar Char
Date '4#A3DA"E"'ME
$se the following syntax.
struct '4#A3DA"E"'ME
Q
int nearP
int nMonthP
int nDayP
int n/ourP
int nMinuteP
int n(econdP
int n4ano(econdP
T
DecAJ Char% $nichar
Dec8J Char% $nichar
PowerCenter provides the following re!ind datatype functions.
$:A&CT-ebindnput%ataType@A! ,e!inds the input port. $se the following
syntax.
'4#A3("A"$(
'4#A3C",e!ind'nputData"ype9'4#A3C"3'4P$"P+,"3/A4D*E port/andle%
'4#A3CDA"A"PE datatype:P
$:A&CT-ebindOutput%ataType@A! ,e!inds the output port. $se the following
syntax.
'4#A3("A"$(
'4#A3C",e!ind+utputData"ype9'4#A3C"3+$"P$"P+,"3/A4D*E
port/andle% '4#A3CDA"A"PE datatype:P
Argume
nt
Datatype 'nput/
+utpu
t
Description
port/an
dle
'4#A3C"3+$"P$"P+,"3/
A4D*E
'nput +utput port handle.
datatype '4#A3CDA"A"PE 'nput "he datatype with which you
re!ind the port. $se the
following values for the
datatype parameter.
7
e'4#A3C"PE3(/+,"
7
e'4#A3C"PE3'4"@8
7
e'4#A3C"PE3C/A,
7
e'4#A3C"PE3,A5
7
e'4#A3C"PE3$4'C/A,
7
e'4#A3C"PE3"'ME
7
e'4#A3C"PE3#*+A"
7
e'4#A3C"PE3D+$6*E
7
e'4#A3C"PE3DEC'MA*
AJ3#')ED
7
e'4#A3C"PE3DEC'MA*8J
3#')ED
7
eI!A_CT%$#_I!A_CT(
AT#TI'#
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
%ata ?andling :un#tions @-ow8Based 0odeA
5hen the 'ntegration (ervice calls the input row notification function% it notifies
the procedure that the procedure can access a row or !loc- of data. /owever% to
get data from the input port% modify it% and set data in the output port% you must
use the data handling functions in the input row notification function. 5hen the
data access mode is row7!ased% use the row7!ased data handling functions.
'nclude the '4#A3C"2etData<datatype=9: function to get the data from the input
port and '4#A3C"(etData9: function to set the data in the output port. 'nclude
the '4#A3C"2et'ndicator9: or '4#A3C"2et*ength9: function if you want the
procedure to verify !efore you get the data if the port has a null value or an
empty string.
PowerCenter provides the following data handling functions.
'4#A3C"2etData<datatype=9:
'4#A3C"(etData9:
'4#A3C"2et'ndicator9:
'4#A3C"(et'ndicator9:
'4#A3C"2et*ength9:
'4#A3C"(et*ength9:
.et %ata :un#tions @-ow8Based 0odeA
$se the '4#A3C"2etData<datatype=9: functions to retrieve data for the port the
function specifies.
ou must modify the function name depending on the datatype of the port you
want the procedure to access.
"a!le ?7A@ lists the '4#A3C"2etData<datatype=9: function syntax and the
datatype of the return value.
"a!le ?7A@. 2et Data #unctions
(yntax ,eturn
Dalue
Datatype
voidG '4#A3C"2etDataDoid9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
Data void
pointer to
the return
value
charG
'4#A3C"2etData(tringM9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
(tring
9M6C(:
'$4'C/A,G
'4#A3C"2etData(tring$9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
(tring
9$nicode:
'4#A3'4"@8
'4#A3C"2etData'4"@89'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
'nteger
dou!le
'4#A3C"2etDataDou!le9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
Dou!le
'4#A3C"3,A5DA"E
'4#A3C"2etDataDate9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
,aw date
'4#A3C"3,A5DECAJ
'4#A3C"2etData,awDecAJ9 '4#A3C"3'4P$"P+,"3/A4D*
E data/andle:P
Decimal
6*+6
9precision
AJ:
'4#A3C"3,A5DEC8J
'4#A3C"2etData,awDec8J9 '4#A3C"3'4P$"P+,"3/A4D*
E data/andle:P
Decimal
6*+6
9precision
8J:
'4#A3C"3DA"E"'ME
'4#A3C"2etDataDate"ime9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
Datetime
Set %ata :un#tion @-ow8Based 0odeA
$se the '4#A3C"(etData9: function when you want the procedure to pass a
value to an output port.
$se the following syntax.
'4#A3("A"$( '4#A3C"(etData9'4#A3C"3+$"P$"P+,"3/A4D*E
data/andle% voidG data:P
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
$ote: 'f you use the '4#A3C"(etPass"hruPort9: function on an input/output port%
do not use set the data or indicator for that port.
ndi#ator :un#tions @-ow8Based 0odeA
$se the indicator functions when you want the procedure to get the indicator for
an input port or to set the indicator for an output port. "he indicator for a port
indicates whether the data is valid% null% or truncated.
PowerCenter provides the following indicator functions.
$:A&CT.etndi#ator@A! 2ets the indicator for an input port. $se the following
syntax.
'4#A3'4D'CA"+, '4#A3C"2et'ndicator9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
"he return value datatype is '4#A3'4D'CA"+,. $se the following values for
'4#A3'4D'CA"+,.
7 $:A&%ATA&7A;%! 'ndicates the data is valid.
7 $:A&$";;&%ATA! 'ndicates a null value.
7 $:A&%ATA&T-"$CAT1%! 'ndicates the data has !een truncated.
$:A&CTSetndi#ator@A! (ets the indicator for an output port. $se the
following syntax.
'4#A3("A"$( '4#A3C"(et'ndicator9'4#A3C"3+$"P$"P+,"3/A4D*E
data/andle% '4#A3'4D'CA"+, indicator:P
Argumen
t
Datatype 'nput/
+utput
Description
data/andl
e
'4#A3C"3+$"P$"P+,"3/A
4D*E
'nput +utput port handle.
indicator '4#A3'4D'CA"+, 'nput "he indicator value for
the output port. $se one
of the following values.
7
'4#A3DA"A3DA*'D.
'ndicates the data is
valid.
7
'4#A34$**3DA"A.
'ndicates a null value.
7
I!A_(ATA_TR"C
AT#(. Indicates the
data has been truncated.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
$ote: 'f you use the '4#A3C"(etPass"hruPort9: function on an input/output port%
do not set the data or indicator for that port.
;ength :un#tions
$se the length functions when you want the procedure to access the length of a
string or !inary input port% or to set the length of a !inary or string output port.
$se the following length functions.
$:A&CT.et;ength@A! $se this function for string and !inary ports only. "he
'ntegration (ervice returns the length as the num!er of characters including
trailing spaces. $se the following syntax.
'4#A3$'4"@8 '4#A3C"2et*ength9'4#A3C"3'4P$"P+,"3/A4D*E
data/andle:P
"he return value datatype is '4#A3$'4"@8. $se a value !etween ;ero and 826
for the return value.
$:A&CTSet;ength@A! 5hen the Custom transformation contains a !inary or
string output port% you must use this function to set the length of the data%
including trailing spaces. Derify you the length you set for string and !inary ports
is not greater than the precision for that port. 'f you set the length greater than
the port precision% you get unexpected results. #or example% the session may
fail.
$se the following syntax.
'4#A3("A"$( '4#A3C"(et*ength9'4#A3C"3+$"P$"P+,"3/A4D*E
data/andle% '$'4"@8 length:P
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
Set Pass8Through Port :un#tion
$se the '4#A3C"(etPass"hruPort9: function when you want the 'ntegration
(ervice to pass data from an input port to an output port without modifying the
data. 5hen you use the '4#A3C"(etPass"hruPort9: function% the 'ntegration
(ervice passes the data to the output port when it calls the input row notification
function.
Consider the following rules and guidelines when you use the set pass7through
port function.
+nly use this function in an initiali;ation function.
'f the procedure includes this function% do not include the
'4#A3C"(etData9:% '4#A3C"(et*ength% '4#A3C"(et'ndicator9:% or
'4#A3C"A(etData9: functions to pass data to the output port.
'n row7!ased mode% you can only include this function when the transformation
scope is ,ow. 5hen the transformation scope is "ransaction or All 'nput% this
function returns '4#A3#A'*$,E.
'n row7!ased mode% when you use this function to output multiple rows
for a given input row% every output row contains the data that is passed
through from the input port.
'n array7!ased mode% you can only use this function for passive Custom
transformations.
ou must verify that the datatype% precision% and scale are the same for the input
and output ports. "he 'ntegration (ervice fails the session if the datatype%
precision% or scale are not the same for the input and output ports you specify in
the '4#A3C"(etPass"hruPort9: function.
$se the following syntax.
'4#A3("A"$( '4#A3C"(etPass"hruPort9'4#A3C"3+$"P$"P+,"3/A4D*E
outputport% '4#A3C"3'4P$"P+,"3/A4D*E inputport:
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
Output $otifi#ation :un#tion
5hen you want the procedure to output a row to the 'ntegration (ervice% use the
'4#A3C"+utput4otification9: function. +nly include this function for active
Multigroup External Procedure transformations. #or passive Multigroup External
Procedure transformations% the procedure outputs a row to the 'ntegration
(ervice when the input row notification function gives a return value. 'f the
procedure calls this function for a passive Multigroup External Procedure
transformation% the 'ntegration (ervice ignores the function.
$ote: 5hen the transformation scope is ,ow% you can only include this function
in the input row notification function. 'f you include it somewhere else% it returns a
failure.
$se the following syntax.
'4#A3,+5("A"$(
'4#A3C"+utput4otification9'4#A3C"3+$"P$"2,+$P3/A4D*E group:P
Argument Datatype 'nput/
+utput
Description
group '4#A3C"3+$"P$"32,+$P3/A4D*E'nput +utput group
handle.
"he return value datatype is '4#A3,+5("A"$(. $se the following values for
the return value.
$:A&-OWS"CC1SS! 'ndicates the function successfully processed the row of
data.
$:A&-OW1--O-! 'ndicates the function encountered an error for the
row of data. "he 'ntegration (ervice increments the internal error count.
$:A&:ATA;1--O-! 'ndicates the function encountered a fatal error for the
row of data. "he 'ntegration (ervice fails the session.
$ote: 5hen the procedure code calls the '4#A3C"+utput4otification9: function%
you must verify that all pointers in an output port handle point to valid data. 5hen
a pointer does not point to valid data% the 'ntegration (ervice might shut down
unexpectedly.
%ata Boundary Output $otifi#ation :un#tion
'nclude the '4#A3C"Data6dry+utput4otification9: function when you want the
procedure to output a commit or roll!ac- transaction.
5hen you use this function% you must select the 2enerate "ransaction property
for this Custom transformation. 'f you do not select this property% the 'ntegration
(ervice fails the session.
$se the following syntax.
'4#A3("A"$(
'4#A3C"Data6dry+utput4otification9'4#A3C"3PA,"'"'+43/A4D*E handle%
'4#A3C"Data6dry"ype data6oundary"ype:P
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3PA,"'"'+43/A4D
*E
'nput /andle name.
data6oundary"yp
e
'4#A3C"Data6dry"ype 'nput "he transaction
type.
$se the following
values for the
data6oundary"yp
e parameter.
7
e6"3C+MM'"
7
eBT_ROLLBACK
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
1rror :un#tions
$se the error functions to access procedure errors. "he 'ntegration (ervice
returns the most recent error.
PowerCenter provides the following error functions.
$:A&CT.et1rror0sg0@A! 2ets the error message in M6C(. $se the following
syntax.
const charG '4#A3C"2etErrorMsgM9:P
$:A&CT.et1rror0sg"@A! 2ets the error message in $nicode. $se the
following syntax.
const '$4'C/A,G '4#A3C"2etErrorMsg$9:P
Session ;og 0essage :un#tions
$se the session log message functions when you want the procedure to log a
message in the session log in either $nicode or M6C(.
PowerCenter provides the following session log message functions.
$:A&CT;og0essage"@A! *ogs a message in $nicode.
$se the following syntax.
void '4#A3C"*ogMessage$9'4#A3C"3Error(everity*evel errorseverity*evel%
'4#A3$4'C/A,G msg:
Argument Datatype 'nput/
+utput
Description
error(everity*evel '4#A3C"3Error(everity*eve
l
'nput (everity level of
the error message
that you want the
'ntegration (ervice
to write in the
session log. $se
the following
values for the
error(everity*evel
parameter.
7
eE(*3*+2
7
eE(*3DE6$2
7
e#&L_#RROR
msg '4#A3$4'C/A,G 'nput Enter the text of
the message in
$nicode in &uotes.
$:A&CT;og0essage0@A! *ogs a message in M6C(.
$se the following syntax.
void '4#A3C"*ogMessageM9'4#A3C"3Error(everity*evel error(everity*evel%
charG msg:
Argument Datatype 'nput/
+utput
Description
error(everity*evel '4#A3C"3Error(everity*eve
l
'nput (everity level of
the error message
that you want the
'ntegration (ervice
to write in the
session log. $se
the following
values for the
error(everity*evel
parameter.
7
eE(*3*+2
7
eE(*3DE6$2
7
e#&L_#RROR
msg charG 'nput Enter the text of
the message in
M6C( in &uotes.
n#rement 1rror Count :un#tion
$se the '4#A3C"'ncrementErrorCount9: function when you want to increase the
error count for the session.
$se the following syntax.
'4#A3("A"$( '4#A3C"'ncrementErrorCount9'4#A3C"3PA,"'"'+43/A4D*E
transformation% si;e3t nErrors% '4#A3("A"$(G p(tatus:P
Argument Datatype 'nput/
+utput
Description
transformation '4#A3C"3PA,"'"'+43/A4D*E'nput Partition handle.
nErrors si;e3t 'nput 'ntegration (ervice
increments the
error count !y
nErrors for the
given
transformation
instance.
p(tatus '4#A3("A"$(G 'nput 'ntegration (ervice
uses
'4#A3#A'*$,E for
the p(tatus
parameter when
the error count
exceeds the error
threshold and fails
the session.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
s Terminated :un#tion
$se the '4#A3C"'s"erminated9: function when you want the procedure to chec-
if the PowerCenter Client has re&uested the 'ntegration (ervice to stop the
session. ou might call this function if the procedure includes a time7consuming
process.
$se the following syntax.
'4#A3C""erminate"ype
'4#A3C"'s"erminated9'4#A3C"3PA,"'"'+43/A4D*E handle:P
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3PA,"'"'+43/A4D*Einput Partition handle.
"he return value datatype is '4#A3C""erminate"ype. "he 'ntegration (ervice
returns one of the following values.
eTT&$OTT1-0$AT1%! 'ndicates the PowerCenter Client has not re&uested
to stop the session.
eTT&ABO-T1%! 'ndicates the 'ntegration (ervice a!orted the session.
eTT&STOPP1%! 'ndicates the 'ntegration (ervice failed the session.
Blo#king :un#tions
5hen the Custom transformation contains multiple input groups% you can write
code to !loc- the incoming data on an input group.
Consider the following rules when you use the !loc-ing functions.
ou can !loc- at most n7A input groups.
ou cannot !loc- an input group that is already !loc-ed.
ou cannot !loc- an input group when it receives data from the same source as
another input group.
ou cannot un!loc- an input group that is already un!loc-ed.
PowerCenter provides the following !loc-ing functions.
$:A&CTBlo#knput:low@A! Allows the procedure to !loc- an input group.
$se the following syntax.
'4#A3("A"$( '4#A3C"6loc-'nput#low9'4#A3C"3'4P$"2,+$P3/A4D*E
group:P
$:A&CT"nblo#knput:low@A! Allows the procedure to un!loc- an input group.
$se the following syntax.
'4#A3("A"$( '4#A3C"$n!loc-'nput#low9'4#A3C"3'4P$"2,+$P3/A4D*E
group:P
Argument Datatype 'nput/
+utput
Description
group '4#A3C"3'4P$"2,+$P3/A4D*E'nput 'nput group handle.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
7erify Blo#king
5hen you use the '4#A3C"6loc-'nput#low9: and '4#A3C"$n!loc-'nput#low9:
functions in the procedure code% verify the procedure chec-s whether or not the
'ntegration (ervice allows the Custom transformation to !loc- incoming data. "o
do this% chec- the value of the '4#A3C"3",A4(3MA36*+CC3DA"A prop'D
using the '4#A3C"2et'nternalProperty6ool9: function.
5hen the value of the '4#A3C"3",A4(3MA36*+CC3DA"A prop'D is
#A*(E% the procedure should either not use the !loc-ing functions% or it should
return a fatal error and stop the session.
'f the procedure code uses the !loc-ing functions when the 'ntegration (ervice
does not allow the Custom transformation to !loc- data% the 'ntegration (ervice
might fail the session.
Pointer :un#tions
$se the pointer functions when you want the 'ntegration (ervice to create and
access pointers to an o!ject or a structure.
PowerCenter provides the following pointer functions.
$:A&CT.et"ser%efinedPtr@A! Allows the procedure to access an o!ject or
structure during run time.
$se the following syntax.
voidG '4#A3C"2et$serDefinedPtr9'4#A3C"3/A4D*E handle:
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3/A4D*E'nput /andle name.
$:A&CTSet"ser%efinedPtr@A! Allows the procedure to associate an o!ject or
a structure with any handle the 'ntegration (ervice provides. "o reduce
processing overhead% include this function in the initiali;ation functions.
$se the following syntax.
void '4#A3C"(et$serDefinedPtr9'4#A3C"3/A4D*E handle% voidG pPtr:
Argument Datatype 'nput/
+utput
Description
handle '4#A3C"3/A4D*E'nput /andle name.
pPtr voidG 'nput $ser pointer.
ou must su!stitute a valid handle for '4#A3C"3/A4D*E.
Change String 0ode :un#tion
5hen the 'ntegration (ervice runs in $nicode mode% it passes data to the
procedure in $C(78 !y default. 5hen it runs in A(C'' mode% it passes data in
A(C'' !y default. $se the '4#A3C"Change(tringMode9: function if you want to
change the default string mode for the procedure. 5hen you change the default
string mode to M6C(% the 'ntegration (ervice passes data in the 'ntegration
(ervice code page. $se the '4#A3C"(etDataCodePage'D9: function if you want
to change the code page.
5hen a procedure includes the '4#A3C"Change(tringMode9: function% the
'ntegration (ervice changes the string mode for all ports in each Custom
transformation that use this particular procedure.
$se the change string mode function in the initiali;ation functions.
$se the following syntax.
'4#A3("A"$( '4#A3C"Change(tringMode9'4#A3C"3P,+CED$,E3/A4D*E
procedure% '4#A3C"(tringMode stringMode:P
Argument Datatype 'nput/
+utput
Description
procedure '4#A3C"3P,+CED$,E3/A4D*E'nput Procedure handle
name.
stringMode '4#A3C"(tringMode 'nput (pecifies the string
mode that you want
the 'ntegration
(ervice to use. $se
the following values
for the stringMode
parameter.
7
eA(M3$4'C+D
E. $se this
when the
'ntegration
(ervice runs in
A(C'' mode and
you want the
procedure to
access data in
$nicode.
7
eA(M3M6C(. "se
this when the
Inte.ration &ervice
runs in "nicode
/ode and you want
the procedure to
access data in
'BC&.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
Set %ata Code Page :un#tion
$se the '4#A3C"(etDataCodePage'D9: when you want the 'ntegration (ervice
to pass data to the Custom transformation in a code page other than the
'ntegration (ervice code page.
$se the set data code page function in the procedure initiali;ation function.
$se the following syntax.
'4#A3("A"$(
'4#A3C"(etDataCodePage'D9'4#A3C"3",A4(#+,MA"'+43/A4D*E
transformation% int dataCodePage'D:P
Argument Datatype 'nput/
+utput
Description
transformation '4#A3C"3",A4(#+,MA"'+43/A
4D*E
'nput "ransformation
handle name.
dataCodePage
'D
int 'nput (pecifies the
code page you
want the
'ntegration
(ervice to pass
data in.
#or valid
values for the
dataCodePage
'D parameter%
see ZCode
Pages[ in the
Administrator
2uide.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
-ow Strategy :un#tions @-ow8Based 0odeA
"he row strategy functions allow you to access and configure the update strategy
for each row.
PowerCenter provides the following row strategy functions.
$:A&CT.et-owStrategy@A! Allows the procedure to get the update strategy
for a row.
$se the following syntax.
'4#A3("A"$( '4#A3C"2et,ow(trategy9'4#A3C"3'4P$"2,+$P3/A4D*E
group% '4#A3C"$pdate(trategy update(trategy:P
Argument Datatype 'nput/
+utput
Description
group '4#A3C"3'4P$"2,+$P3/A4D*
E
'nput 'nput group
handle.
update(trategy '4#A3C"3$PDA"E(",A"E2 'nput $pdate
strategy for the
input port. "he
'ntegration
(ervice uses
the following
values.
7
e$(3'4(E
," M H
7
e$(3$PDA"
E M A
7
e$(3DE*E
"E M 8
7
e"&_R#0#CT
) *
$:A&CTSet-owStrategy@A! (ets the update strategy for each row. "his
overrides the '4#A3C"ChangeDefault,ow(trategy function.
$se the following syntax.
'4#A3("A"$( '4#A3C"(et,ow(trategy9'4#A3C"3+$"P$"2,+$P3/A4D*E
group% '4#A3C"3$PDA"E(",A"E2 update(trategy:P
Argument Datatype 'nput/
+utput
Description
group '4#A3C"3+$"P$"2,+$P3/A4D*
E
'nput +utput group
handle.
update(trateg
y
'4#A3C"3$PDA"E(",A"E2 'nput $pdate
strategy you
want to set for
the output
port. $se one
of the following
values.
7
e$(3'4(E
," M H
7
e$(3$PDA"
E M A
7
e$(3DE*E
"E M 8
7
e"&_R#0#CT
) *
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.
Change %efault -ow Strategy :un#tion
6y default% the row strategy for a Custom transformation is pass7through when
the transformation scope is ,ow. 5hen the transformation scope is "ransaction
or All 'nput% the row strategy is the same value as the "reat (ource ,ows As
session property !y default.
#or example% in a mapping you have an $pdate (trategy transformation followed
!y a Custom transformation with ,ow transformation scope. "he $pdate
(trategy transformation flags the rows for update% insert% or delete. 5hen the
'ntegration (ervice passes a row to the Custom transformation% the Custom
transformation retains the flag since its row strategy is pass7through.
/owever% you can change the row strategy of a Custom transformation with
PowerCenter. $se the '4#A3C"ChangeDefault,ow(trategy9: function to change
the default row strategy at the transformation level. #or example% when you
change the default row strategy of a Custom transformation to insert% the
'ntegration (ervice flags all the rows that pass through this transformation for
insert.
$ote: "he 'ntegration (ervice returns '4#A3#A'*$,E if the session is not in
data7driven mode.
$se the following syntax.
'4#A3("A"$(
'4#A3C"ChangeDefault,ow(trategy9'4#A3C"3",A4(#+,MA"'+43/A4D*E
transformation% '4#A3C"3Default$pdate(trategy default$pdate(trategy:P
Argument Datatype 'nput/
+utpu
t
Description
transformation '4#A3C"3",A4(#+,MA"'+
43/A4D*E
'nput "ransformation
handle.
default$pdate(tr
ategy
'4#A3C"3Default$pdate(trate
gy
'nput (pecifies the row
strategy you want
the 'ntegration
(ervice to use for
the Custom
transformation.
7
eD$(3PA(("/
,+$2/. #lags
the row for
passthrough.
7
eD$(3'4(E,".
#lags rows for
insert.
7
eD$(3$PDA"
E. #lags rows
for update.
7
e("&_(#L#T#.
!la.s rows for
delete.
"he return value datatype is '4#A3("A"$(. $se '4#A3($CCE(( and
'4#A3#A'*$,E for the return value.