EssOtlDetailQueryVaryingAttributes

Similar to EssOtlQueryVaryingAttributes, except that the results provide the specific associated attributes in pphDetailMemberArray.

Syntax

ESS_FUNC_M EssOtlDetailQueryVaryingAttributes(
		ESS_HOUTLINE_T 							hOutline,
		ESS_PVARYING_ATTRIBUTEQUERY_T 	pAttrQuery,
		ESS_PPERSPECTIVE_T 						pPerspective,
		ESS_PMBRCOUNTS_T 							pCount,
		ESS_PPHMEMBER_T 							pphMembers,
		ESS_PPHMEMBER_T 							pphDetailMemberArray,
		ESS_USHORT_T 								usValiditySetType,
		ESS_PVALIDITYSET_T 						**pppValiditySets);
ParameterData TypeDescription

hOutline

ESS_HOUTLINE_T

Outline context handle

pAttrQuery

ESS_PVARYING_ATTRIBUTEQUERY_T

Pointer to the structure that defines the query

pPerspective

ESS_PPERSPECTIVE_T

Pointer to a collection of independent members used when querying the client or server for associations

pCount

ESS_PMBRCOUNTS_T

Pointer to the number of base members returned

pphMembers

ESS_PPHMEMBER_T

Pointer to the array of attribute member handles

pphDetailMemberArray

ESS_PPHMEMBER_T

Pointer to the array of attribute member detail handles

usValiditySetType

ESS_USHORT_T

See ESS_VALIDITYSET_T.

**pppValiditySets

ESS_PVALIDITYSET_T

Pointer to the validity set array

Return Value

Returns:

Example

void TestEssOtlDetaileQueryVaringAttributes()
{
	ESS_STS_T	sts = ESS_STS_NOERR;
	ESS_HOUTLINE_T	hOutline = ESS_NULL;
	ESS_OBJDEF_T	Object;
	ESS_USHORT_T	i = 0;
	ESS_PMBRINFO_T	pMbrInfo = ESS_NULL;
	ESS_VARYING_ATTRIBUTEQUERY_T	pAttrQuery;
	ESS_MBRCOUNTS_T	Counts;
	ESS_USHORT_T	usValiditySetType;
	ESS_HMEMBER_T	hIndepMbrHandlesArray[4];
	ESS_PERSPECTIVE_T	Perspective;
	ESS_PHMEMBER_T	phMbrHandles = ESS_NULL;
	ESS_PHMEMBER_T	phDetailedMembers = ESS_NULL;
	ESS_PVALIDITYSET_T	*pValiditySets = ESS_NULL;
	ESS_HMEMBER_T	hAttrMbr, hBaseMbr;
	ESS_HMEMBER_T	hAttrDim;
	ESS_PREDICATE_T	Predicate;

	memset(&Object, '\0', sizeof(ESS_OBJDEF_T)); 
	memset(&Counts, '\0', sizeof(ESS_MBRCOUNTS_T));  
	memset(&pAttrQuery, 0x00, sizeof(ESS_ATTRIBUTEQUERY_T));
	memset(&Predicate, '\0', sizeof(ESS_PERSPECTIVE_T));

	Object.hCtx = hCtx;
	Object.ObjType = ESS_OBJTYPE_OUTLINE;
	Object.AppName = szAppName;
	Object.DbName = szDbName;
	Object.FileName = szDbName;
	sts = EssOtlOpenOutlineQuery(hCtx, &Object, &hOutline); 
	printf("EssOtlOpenOutlineQuery sts: %ld\n",sts);   

	Counts.ulStart = 0;
	Counts.ulMaxCount = 10;

	Predicate.ulQuery = ESS_SEARCH;
	Predicate.ulOptions = ESS_MEMBERSONLY;
	Predicate.pszDimension  = "";
	Predicate.pszString2 = "";

	/* Get handles for attribute member and dimension */
	Predicate.pszString1 = "Type";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hAttrDim = phMbrHandles[0];
	Predicate.pszString1 = "Contractor";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hAttrMbr = phMbrHandles[0];

	Predicate.pszString1 = "Doe,Jane";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hBaseMbr = phMbrHandles[0];

	/* Get handles for independent members */
	Predicate.pszString1 = "Jan";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hIndepMbrHandlesArray[0] = phMbrHandles[0];
	hIndepMbrHandlesArray[2] = phMbrHandles[0];

	Predicate.pszString1 = "FY03";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hIndepMbrHandlesArray[1] = phMbrHandles[0];
	Predicate.pszString1 = "FY04";
	sts = EssOtlQueryMembersByName(hOutline, ESS_NULL, &Predicate, &Counts, &phMbrHandles);
	hIndepMbrHandlesArray[3] = phMbrHandles[0];

	memset(&Perspective, '\0', sizeof(ESS_PERSPECTIVE_T));
	Perspective.usValiditySetType = ESS_VALIDITYSET_TYPE_MBRHDLS;
	Perspective.countOfIndepDims = 2;
	Perspective.countOfIndepRanges = 1;
	Perspective.pIndepMbrs = hIndepMbrHandlesArray;

	/* Query by handle with InputMemberType of ESS_ATTRIBUTE_MEMBER and OutputMemberType of ESS_BASE_MEMBER*/
	printf("\n*** Query by handle with InputMemberType of ESS_ATTRIBUTE_MEMBER and OutputMemberType of ESS_BASE_MEMBER:\n");
	pAttrQuery.bInputMemberIsHandle = ESS_TRUE;
	pAttrQuery.uInputMember.hMember = hAttrMbr;
	pAttrQuery.usInputMemberType = ESS_ATTRIBUTE_MEMBER;
	pAttrQuery.usOutputMemberType = ESS_BASE_MEMBER;
	pAttrQuery.Attribute.usDataType = ESS_ATTRMBRDT_NONE;
	pAttrQuery.usOperation = ESS_ALL;

	usValiditySetType = ESS_VALIDITYSET_TYPE_MBRHDLS;
	sts = EssOtlDetailQueryVaryingAttributes(hOutline, &pAttrQuery, &Perspective, &Counts,
					&phMbrHandles, &phDetailedMembers, usValiditySetType, &pValiditySets);
	printf("EssOtlDetailQueryVaryingAttributes sts: %d\n", sts);
	if (!sts)
	{
		if (phMbrHandles)
		{
			printf("\tReturned member:\n");
			GetMemberInfo(hOutline, Counts, phMbrHandles);
			if(Counts.ulReturnCount && phMbrHandles)
				sts = EssOtlFreeMembers(hOutline, Counts.ulReturnCount, phMbrHandles);
		}

		if(phDetailedMembers)
		{
			printf("\tAssociated attribute member:\n");
			GetMemberInfo(hOutline, Counts, phDetailedMembers);
			if (Counts.ulReturnCount && phDetailedMembers)
				sts = EssOtlFreeMembers(hOutline, Counts.ulReturnCount, phDetailedMembers);
		}
	}

	sts = EssUnlockObject(hCtx, ESS_OBJTYPE_OUTLINE, Object.AppName, Object.DbName, Object.FileName);
	printf("\nEssUnlockObject sts: %d\n", sts);

	sts = EssOtlCloseOutline(hOutline);
	printf("EssOtlCloseOutline sts: %d\n",sts);
}

See Also

  • EssOtlQueryVaryingAttributes