特定の属性メンバーまたは関数のメンバー情報のクエリーを行い、各種属性のパースペクティブの指定を可能にします。
構文
ESS_FUNC_M EssOtlQueryVaryingAttributes (
hOutline, pAttrQuery, pPerspective,
pCount, pphMembers
);
| パラメータ | データ型 | 説明 |
|---|---|---|
hOutline |
ESS_HOUTLINE_T |
アウトラインのコンテキスト・ハンドル。 |
pAttrQuery |
ESS_PATTRIBUTEQUERY_T |
クエリーを定義する構造体へのポインタ。
|
pPerspective |
ESS_PPERSPECTIVE_T |
クライアントまたはサーバーで関連付けをクエリーする際に使用される、独立したメンバーの集合へのポインタ。 |
pCount |
ESS_PMBRCOUNTS_T |
戻される基本メンバーの数へのポインタ。 |
pphMembers |
ESS_PPHMEMBER_T |
属性メンバーのハンドルの配列へのポインタ。 |
備考
EssOtlQueryAttributesExに類似のこの関数は、属性のクエリーを行います。クエリーに入力基本メンバーおよび出力属性メンバー、または入力属性メンバーおよび出力基本メンバーが含まれる場合、特定のパースペクティブを使用して、そのパースペクティブで有効な関連付けに基づき、結果を限定します。
構造体ESS_VARYING_ATTRIBUTEQUERY_TはESS_ATTRIBUTEQUERY_Tとバージョンごとに属性次元のフィールドが含まれている点を除き同一です。
パースペクティブは、独立したメンバーを個別に指定する必要がある点に注意してください。
パースペクティブが指定されていない場合、またはパースペクティブで独立したメンバーのNULLセットが指定されている場合、独立したメンバーの任意の組合せに対して存在するすべての関連付けがルーチンによって検討されます。この場合、戻された妥当性セットには、個別の独立したメンバーの範囲が含まれることがあり、クライアントはこれらを分割する必要があります。
戻り値
成功の場合、0が戻されます。
例
void TestEssOtlQueryVaryingAttributes()
{
ESS_STS_T sts = ESS_STS_NOERR;
ESS_HOUTLINE_T hOutline = ESS_NULL;
ESS_OBJDEF_T Object;
ESS_USHORT_T i = 0;
ESS_HMEMBER_T hBaseMbr = ESS_NULL;
ESS_PMBRINFO_T pMbrInfo = ESS_NULL;
ESS_VARYING_ATTRIBUTEQUERY_T pAttrQuery;
ESS_MBRCOUNTS_T Counts;
ESS_HMEMBER_T hIndepMbrHandlesArray[4];
ESS_PERSPECTIVE_T Perspective;
ESS_PHMEMBER_T phMbrHandles;
ESS_HMEMBER_T hAttrMbr;
ESS_HMEMBER_T hAttrDim;
ESS_PREDICATE_T Predicate;
memset(&Object, '\0', sizeof(Object));
Object.hCtx = hCtx;
Object.ObjType = ESS_OBJTYPE_OUTLINE;
Object.AppName = szAppName;
Object.DbName = szDbName;
Object.FileName = szDbName;
printf("\n");
sts = EssOtlOpenOutlineQuery(hCtx, &Object, &hOutline);
printf("EssOtlOpenOutlineQuery sts: %ld\n",sts);
memset(&Counts, '\0', sizeof(Counts));
Counts.ulStart = 0;
Counts.ulMaxCount = 0;
/* Get handles for independent members */
memset(&Predicate, '\0', sizeof(Predicate));
Predicate.ulQuery = ESS_SEARCH;
Predicate.ulOptions = ESS_MEMBERSONLY;
Predicate.pszDimension = "";
Predicate.pszString1 = "Jan";
Predicate.pszString2 = "";
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];
/* 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];
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");
memset(&pAttrQuery, '\0', sizeof(ESS_ATTRIBUTEQUERY_T));
pAttrQuery.bInputMemberIsHandle = ESS_TRUE;
pAttrQuery.uInputMember.hMember = hAttrMbr;
pAttrQuery.uAttributeDimension.hMember = hAttrDim;
pAttrQuery.usInputMemberType = ESS_ATTRIBUTE_MEMBER;
pAttrQuery.usOutputMemberType = ESS_BASE_MEMBER;
pAttrQuery.Attribute.usDataType = ESS_ATTRMBRDT_NONE;
pAttrQuery.usOperation = ESS_ALL;
sts = EssOtlQueryVaryingAttributes(hOutline, &pAttrQuery, &Perspective, &Counts, &phMbrHandles);
printf("EssOtlQueryVaryingAttributes sts: %d\n", sts);
if (!sts)
{
if(phMbrHandles)
{
GetMemberInfo(hOutline, Counts, phMbrHandles);
if(Counts.ulReturnCount && phMbrHandles)
sts = EssOtlFreeMembers(hOutline, Counts.ulReturnCount, phMbrHandles);
}
else
printf("\tNo member returned.\n");
}
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);
}
関連トピック