Skip to main content



This C++ SDK uses outdated technology that limits your extension opportunities. We've built a new Platform SDK using Python and the latest open-source technology to deliver a vastly improved development experience. Go to Platform SDK to get started!


The IncomingConnectionInterface class exposes methods the Alteryxengine uses to communicate with a plugin that is processing an incoming connection. All tools with incoming connections must set the associated properties. If you are using the standard naming conventions, you can use the ImplementIncomingConnectionInterface.


A pointer to the object that exposing the IncomingConnectionInterface functions.

void * handle;

The object pointed to by the handle must expose the following functions:

  • II_Init

  • II_PushRecord

  • II_UpdateProgress

  • II_Close

  • II_Free


A pointer to a function that is called when the incoming connection has finished passing all records.

typedef void ( _stdcall * T_II_Close)(void * handle); T_II_Close pII_Close;

The function pointed to by this proper should:

  1. Push any output records that have not been sent downstream.

  2. Notify the Alteryxengine the process is complete using the OutputMessage function of the EngineInterface class, setting the nStatus parameter to 4.

  3. Close any outgoing connections.


A pointer to a function that is called when the incoming connection is done with the plugin.

typedef void ( _stdcall * T_II_Free)(void * handle); T_II_Free pII_Free;

Use to free any resources that may have been created during process.


A pointer to a function that is called when the incoming connection's record metadata becomes available or has changed, which is used to configure the plugin. Returns 1 if successfully configured and initialized, otherwise returns 0.

typedef long ( _stdcall * T_II_Init)(void * handle, const wchar_t * pXmlRecordMetaInfo); T_II_Init pII_Init;

pXmlRecordMetaInfo: The XML representation of the incoming connection's field and, optionally, sort properties. The XML should adhere to the following form:

<MetaInfo connection="Output"> <RecordInfo> <Field name="FieldName" source="InputSource" type="DataType"/> //For numeric field types <Field name="FieldName" size="SizeInBytes" source="InputSource" type="DataType"/> //For all other field types ... </RecordInfo> <SortInfo> //If the incoming connection has been pre-sorted <Field field="FieldName" order="SortOrder" /> //Sort order will be either "Asc" or "Desc" ... </SortInfo> </MetaInfo>


A pointer to a function that is called when an input record is sent to the plugin.

typedef long ( _stdcall * T_II_PushRecord)(void * handle, const RecordData * pRecord); T_II_PushRecord pII_PushRecord;

pRecord: The RecordData structure that represents the data for the incoming record.


A pointer to a function that is called when the incoming connection requests plugin progress.

typedef void ( _stdcall * T_II_UpdateProgress)(void * handle, double dPercent); T_II_UpdateProgress pII_UpdateProgress;

dPercent: A value between 0.0 and 1.0 indicating progress percent.



The ImplementIncomingConnectionInterface class initializes an IncomingConnectionInterface for a tool. This class assumes your tool adheres to the standardized naming conventions:

II_Close() II_Init(const wchar_t * pXmlRecordMetaInfo) II_PushRecord(const RecordData * pRecord) II_UpdateProgress(double dPercent)

Because this is a templated class, you must specify the type when calling methods.



Initialize an incoming connection interface.

static void Init(int nToolId, const EngineInterface * pEngineInterface, IncomingConnectionInterface *r_pIncomingConnectionInterface, T_II *pII, bool bTakeOwnership)

nToolId: The ID of the tool calling the function.

pEngineInterface: A pointer to the Alteryxengine provided to the plugin's entry point.

r_pIncominngConnectionInterface: A pointer to the IncomingConnectionInterface object to initialize.

pII: An unmanaged pointer to the instance of your plugin.

bTakeOwnership: An option that determines if Alteryx is responsible for releasing the PluginInterface once processing is complete:

  • True: Alteryx is responsible.

  • False: Interface release is managed by the tool.