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