Integration Server Drill-Through Example

void main(int argc, char *argv[])
{
	ESSG_STS_T      sts = ESS_STS_NOERR;
	ESSG_HGRID_T    hGrid;
	ESSG_HANDLE_T	Handle;
	ESSG_INIT_T     InitStruct;

	/* BEGIN: initialize grid handle and create a new grid */
	InitStruct.ulVersion      = ESSG_VERSION;
	InitStruct.ulMaxRows      = 1000;
	InitStruct.ulMaxColumns   = 200;
	InitStruct.pfnMessageFunc = ESS_NULL;
	InitStruct.pUserdata      = ESS_NULL;

	sts = EssGInit(&InitStruct, Handle);
	if (sts != ESS_STS_NOERR)
		return;

	sts = EssGNewGrid(Handle, hGrid);
	if (sts != ESS_STS_NOERR)
		return;
	/* END: initialize grid handle and create a new grid */
	

	ESSG_DTTest(Handle, hGrid);

	sts = EssGTerm(Handle);
}

void ESSG_DTTest(ESSG_HANDLE_T	Handle, ESSG_HGRID_T hGrid)
{
	ESSG_STS_T        errsts,
                          sts            = ESS_STS_NOERR;
        ESSG_HLRO_T       hLRO           = 0;
	ESSG_PPDATA_T	  ppDataIn;
	/* ESSG_PPDATA_T  ppDataOut; */
	ESSG_RANGE_T	  rDataRangeIn,
	                  rDataRangeOut;
	ESSG_USHORT_T	  usCells;
	ESSG_USHORT_T	  usState        = 0;
	ESSG_RANGE_T	  Range;
	ESSG_PDTHINST_T   pDTInst;   
	ESSG_STR_T        ErrMesg;
	ESSG_ULONG_T      ErrSize        = 255;
  	memset(&rDataRangeOut, 0, sizeof(ESSG_RANGE_T));
	ErrMesg = malloc(255);

	/* connect the grid to a database on the server */
	sts = EssGConnect(hGrid, server, user, pwd, app, db, ESSG_CONNECT_DEFAULT);

	if(sts == ESS_STS_NOERR)
	{
		ppDataIn = BuildTableForDrillThru (&rDataRangeIn); 

		DisplayOutput(ppDataIn, rDataRangeIn);
		
		usCells             = 1;
		Range.ulRowStart    = 1;
		Range.ulColumnStart = 6;
		Range.ulNumRows     = 1;  
		Range.ulNumColumns  = 1;
 		sts = EssGBeginDrillOrLink(hGrid, usCells, &Range, ESSG_OPT_ZOOM);

	}

	if(sts == ESS_STS_NOERR)
		/* send the entire grid to define the query */
		sts = EssGSendRows(hGrid, &rDataRangeIn, ppDataIn);

	if(sts == ESS_STS_NOERR)
	{
		/* perform the drillorlink operation */
		sts = EssGPerformOperation(hGrid, 0);

		/* free the built data */
		FreeTwoDim(ppDataIn, rDataRangeIn.ulNumRows);
	}

	if (sts ==ESS_STS_NOERR)
		sts = EssGDTRequestDrillThrough(hGrid, usCells, &Range, &pDTInst);

	if (sts == ESS_STS_NOERR) 
	{
		/* Get the DT Info corresponding to the DT handle */
		sts = ESSGDTGetInfo(pDTInst);


	    /* Set the password info for executing the drill through report */
		sts = ESSGDTSetInfo(pDTInst);

		/* determine the list of reports associated with the data cell range. */
		sts = ESSGDTListReports(pDTInst);

		/* Execute the report. Using index 0 for now as we have only one report */
		sts = EssGDTExecuteReport(pDTInst, 0);
		if ( sts )      /* Error Condition print error mesg */
			errsts = EssDTAPIGetError(pDTInst, &sts, ErrMesg, ErrSize);

		/* Get the headers for the report associated with the data cell range. */
		sts = ESSGDTGetHeader(pDTInst);
		if ( sts )      /* Error Condition print error mesg */
			EssDTAPIGetError(pDTInst, &sts, ErrMesg, ErrSize);

		/* Get the data for the report associated with the data cell range. */
		sts = ESSGDTGetData(pDTInst);
		if ( sts )      /* Error Condition print error mesg */
			EssDTAPIGetError(pDTInst, &sts, ErrMesg, ErrSize);
	}

	sts = EssGDTEndDrillThrough(pDTInst);
}

See the following functions for more information on Integration Server Drill-Through:

EssGDTConnect()
EssGDTEndDrillThrough()
EssGDTExecuteReport()
EssGDTGetData()
EssGDTGetHeader()
EssGDTGetInfo()
EssGDTListReports()
EssGDTRequestDrillThrough()
EssGDTSetInfo()