Alteryx Engine API Example

The Alteryx Engine API is a collection of methods and callbacks that allow you to call into the Alteryx Engine. The following code is a sample usage of the Alteryx Engine API.

const int STATUS_Info = 1;
const int STATUS_Warning = 2;
const int STATUS_Error = 3; 
const int STATUS_FieldConversionError = 5;
const int STATUS_File_Input = 8; 
const int STATUS_File_Output = 9; 
const int STATUS_Flag_Transient = 0x40000000;  // in combination with Info, Warning or FieldConversionError

// Example RuntimeData struct
struct RuntimeData
{
   int nWarnings;
   int nFieldConversionErrors;
   int nErrors;
   std::wofstream logFile;
   RuntimeData()
	: nWarnings(0)
	, nFieldConversionErrors(0)
	, nErrors(0)
   {
   }
};


long _stdcall ProgressMessage(__int64 userData, int nToolID, double dPercentProgress)
{
   // See TCallbackToolProgress for actions you can accomplish here....
   return 0;
}

long _stdcall CallbackMessage(__int64 userData, int nToolID, int nStatus, const wchar_t *pMessage)
{
   // See callback documentation for what you can do when you define your own callback message
   switch (nStatus & ~STATUS_Flag_Transient)
   {
   case STATUS_Info:
   case STATUS_File_Input:
   case STATUS_File_Output:
	break;
   case STATUS_Warning:
     reinterpret_cast<RuntimeData *>(userData)->nWarnings++;
     reinterpret_cast<RuntimeData *>(userData)->logFile << L"Warning - ";
	break;
   case STATUS_Error:
   reinterpret_cast<RuntimeData *>(userData)->nErrors++;
   reinterpret_cast<RuntimeData *>(userData)->logFile << L"Error - ";
	break;
   case STATUS_FieldConversionError:
     reinterpret_cast<RuntimeData *>(userData)->nFieldConversionErrors++;
     reinterpret_cast<RuntimeData *>(userData)->logFile << L"FieldConversionError - ";
	break;
   default:
	return 0;
   }

   if (nToolID<0)
     reinterpret_cast<RuntimeData *>(userData)->logFile << L"Alteryx Engine";
   else
     reinterpret_cast<RuntimeData *>(userData)->logFile << L"ToolId " << nToolID;
     reinterpret_cast<RuntimeData *>(userData)->logFile << L": " << pMessage << L"\n";
     return 0;
}
//      Later in your API code...
{
   RuntimeData runtimeData;

   AlteryxRunModule2(L"<workflowPath>", L"",
	ProgressMessage, CallbackMessage,
	reinterpret_cast<__int64>(&runtimeData));
}