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);
| Parameter | Data Type | Description |
|---|---|---|
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:
0—If successful
Error number—If unsuccessful
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