EssOtlQueryVaryingAttributes

特定の属性メンバーまたは関数のメンバー情報のクエリーを行い、各種属性のパースペクティブの指定を可能にします。

構文

            ESS_FUNC_M EssOtlQueryVaryingAttributes (
            hOutline, pAttrQuery, pPerspective, 
pCount, pphMembers
            );
         
パラメータデータ型説明

hOutline

ESS_HOUTLINE_T

アウトラインのコンテキスト・ハンドル。

pAttrQuery

ESS_PATTRIBUTEQUERY_T

クエリーを定義する構造体へのポインタ。

  • pAttrQuery.bInputMemberIsHandle = ESS_TRUEの場合、pAttrQuery.uInputMember.hMemberにメンバーへのハンドルが割り当てられていることを確認してください。

  • pAttrQuery.bInputMemberIsHandle = ESS_FALSEの場合、pAttrQuery.uInputMember.szMemberにメンバー名が割り当てられていることを確認してください。

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);
}
      

関連トピック