Graphisoft®

API Development KitVersion: 18

APIReservationChangeHandlerProc

요소 예약 변경사항들을 처리하기 위한 사용자 제공 콜백 프로시저입니다.

    typedef GSErrCode  APIReservationChangeHandlerProc (
        const GS::HashTable<API_Guid, short>&   reserved,
        const GS::HashSet<API_Guid>&            released,
        const GS::HashSet<API_Guid>&            deleted
    );

 

파라미터

reserved
[in] 최근 예약된 요소들의 리스트입니다. 해시 테이블 내 해시 키(hash key)는 요소 guid입니다. 페어 키(paired key)는 요소를 예약한 멤버의 팀워크 소유자 식별자입니다.
released
[in] 최근 예약 해제된 요소들의 리스트입니다.
deleted
[in] 최근 팀워크 동작들을 하는 동안 제거된 요소들의 리스트입니다. 요소들을 제거한 멤버가 BIM 서버로 변경사항들을 전송할 때, 요소 삭제들이 보고됩니다.

 

리턴 값

NoError
함수가 성공적으로 완료되었습니다.

다른 공통 API 오류들에 대해서는 API 오류 문서를 보십시오.

 

설명

요소 예약 변경사항들에 대한 알림들을 받기 위해서는 이 콜백 함수를 구현하고 ACAPI_Notify_CatchElementReservationChange와 함께 세트되어야 합니다.

당신은 APIEnv_ProjectSharingID 환경 함수와 함께 멤버들의 정보를 가져올 수 있습니다. 핸들러 함수가 현재 팀 멤버에 의해 영향을 받는 예약 변경사항들도 받는다는 것을 참고하십시오. 현재 팀 멤버를 식별하려면 APIEnv_UserWorkspaceID를 사용하십시오.

예약 변경 핸들러에서 가급적 데이터베이스를 변경할 수 있는 함수들을 호출하지 않도록 하십시오.

 

예제

// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
GSErrCode __ACENV_CALL  ElementReservationChangeHandler (const GS::HashTable<API_Guid, short>&  reserved,
                                                         const GS::HashSet<API_Guid>&           /*released*/,
                                                         const GS::HashSet<API_Guid>&           /*deleted*/)
{
    GS::HashTable<API_ElemTypeID,Int32> reservedStat;

    for (GS::HashTable<API_Guid, short>::ConstPairIterator it = reserved.EnumeratePairs (); it != NULL; ++it) {
        API_Elem_Head elemHead;
        BNZeroMemory (&elemHead, sizeof (API_Elem_Head));
        elemHead.guid = *(it->key);
        if (ACAPI_Element_GetHeader (&elemHead) == NoError)
            ++(reservedStat.Retrieve (elemHead.typeID, 0));     // 동일한 타입의 요소들을 셈
    }

    if (!reservedStat.IsEmpty ()) {                             // 예약된 요소들의 통계를 프린트함
        GS::UniString reportString ("=  Recently reserved elements: ");
        for (GS::HashTable<API_ElemTypeID,Int32>::PairIterator it = reservedStat.EnumeratePairs (); it != NULL; ++it) {
            GS::UniString elemTypeName;
            ACAPI_Goodies (APIAny_GetElemTypeNameID, (void*) *(it->key), &elemTypeName);
            GS::UniString elemCountStr = GS::UniString::Printf ("  %T:%d", elemTypeName.ToPrintf (), *(it->value));
            reportString.Append (elemCountStr);
        }
        ACAPI_WriteReport (reportString.ToCStr ().Get (), false);
    }

    return NoError;
}


// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
void    CatchElementReservationChanges (bool enableNotifications)
{
    if (enableNotifications)
        ACAPI_Notify_CatchElementReservationChange (ElementReservationChangeHandler);
    else
        ACAPI_Notify_CatchElementReservationChange (NULL);
}

 

요구사항

버전: API 15 또는 이후
헤더: APIdefs_Callback.h

 

참고사항

ACAPI_Notify_CatchElementReservationChange
팀워크 제어
알림 관리자
API 함수