Interface DocumentIdConverterInterface

The DocumentIdConverterInterface interface is used to get the part instance ids and geometric instance ids that are linked to a given document (referenced by its metadata document id).

The metadata document id is retrieved from a SearchDocumentResultInterface after a successful call to a search request (see Search).

The DocumentIdConverterInterface interfaces are created through the DataSessionInterface.createDocumentIdConverter method.

The list of signals the DocumentIdConverterInterface may trigger is available in the DocumentIdConverterInterfaceSignal enumeration.

The conversion mechanism is triggered through the convert method. The result is not available right away, but the event DocumentIdConverterInterfaceSignal.DocumentIdConverterReady is triggered when the result of the DocumentIdConverterInterface is available. The result is available through the getConversionResult function.

Warning : there may be cases when the getConversionResult is not available such as when the DocumentIdConverterInterface is fetching data, i.e. when isRunning returns true, or when the DocumentIdConverterInterface has been cancelled, i.e. when isCancelled returns true.

A DocumentIdConverterInterface may be interrupted (cancelled) when the DocumentIdConverterInterface is fetching data and cancel is called. In such cases, the DocumentIdConverterInterfaceSignal.DocumentIdConverterCancelled signal is fired, and shortly after, DocumentIdConverterInterfaceSignal.DocumentIdConverterReady signal is fired, but getConversionResult will return undefined. Just call convert with another (or the same) metadata document id to trigger a new retrieval.

If you call multiple times convert before receiving the DocumentIdConverterInterfaceSignal.DocumentIdConverterReady, only one DocumentIdConverterInterfaceSignal.DocumentIdConverterReady will be sent with the content of the last call to convert.

/** 
* Sample to explain how to make search requests.
*/
import {
InfiniteEvent, SearchInterface, DocumentIdConverterInterface, WorkingSetInterface,
SearchDocumentResultInterface, DocumentIdResultInterface, DocumentIdConverterResultInterface,
SearchInterfaceSignal, DocumentIdConverterInterfaceSignal, DataSessionInterface, MetadataDocumentType
} from 'generated_files/documentation/appinfiniteapi';

// the DataSessionInterface has been created previously and is connected
let lDataSession : DataSessionInterface;
// the Working set for the whole DMU as been set previously
let lCurrentDMUVisibilityCtx : WorkingSetInterface;

// the Working set for the search has been set previously (can be lCurrentDMUVisibilityCtx)
let lSearchVisibilityCtx : WorkingSetInterface;
// the string to search in documents
let lQueryString : string;
// the max number of results
const lMaxDocsToRetrieve : number = 50;

// create a search requester
const lSearch : SearchInterface = lDataSession.createSearch();

// to get actual results from a search request :
// the search requester gets result in the form of documents,
// in a second step, the user may enquire the server to know the
// relevant `part instance ids`
// the DocumentIdConverterInterface is there to make the conversion between
// a document id and the actual `part instances`
const lDocumentIdConverter : DocumentIdConverterInterface = lDataSession.createDocumentIdConverter();

// When the search is ready, we check for errors
// we may find all the `geometric instance ids` in the search result
// we get the first found document
// and find the relevant `part instance ids` and `geometric instance ids`
const onSearchReady = (pEvent: InfiniteEvent) : void =>
{
const lSearchInterface: SearchInterface = <SearchInterface>(pEvent.emitter);
// make sure the search in no more running
if (lSearchInterface.isRunning()) {
console.assert(false, 'this should not happen');
return;
}
// and make sure no error
if (lSearchInterface.getLastError() !== undefined) {
return;
}

// get all the `geometric instance ids` of the search request
const lGeometricInstanceIds: Uint32Array | undefined = lSearchInterface.getGeometricInstanceIds();
if (lGeometricInstanceIds !== undefined)
{
console.log('all the geometric instances concerned by the search:' + lGeometricInstanceIds.length);
}

// and get the documents (content is filtered by the last parameter of SearchInterface.search)
const lSearchResult: Array<SearchDocumentResultInterface> | undefined = lSearchInterface.getSearchDocuments();
if (lSearchResult) {
console.log('Search finished: ' + lSearchResult.length + ' result(s)');
// do we have all documents, or are there more that were not included due to the search results capped to lMaxDocsToRetrieve ?
if (lSearchInterface.hasOtherResults())
{
// some GUI code there perhaps ?
console.log('Search was capped to ' + lMaxDocsToRetrieve);
}
if (lSearchResult.length > 0) {
// get the `part instance ids` of the first document
const lDocumentId: number = lSearchResult[0].getDocumentId();
const lIsInVisibility : boolean = lSearchResult[0].isInWorkingSet();
const lDocumentType: MetadataDocumentType = lSearchResult[0].getDocumentType();
let lVisibilityCtxToUse : WorkingSetInterface;
if (lIsInVisibility)
{
console.log('retrieve document in visibility : ' + lDocumentId);
// we will try here to find instances only in the 'search' Working set
// but depending on your needs, you may use lCurrentDMUVisibilityCtx to extend the
// result to the `part instances` of the whole DMU, it is up to you
// or make 2 requests, one in the 'search' ctx, the other outside, or ....
lVisibilityCtxToUse = lSearchVisibilityCtx;
}
else {
// this case cannot happen if the third parameter to search is true
console.log('retrieve document outside visibility : ' + lDocumentId);
// in order to get results, we will make the conversion in the whole DMU Working set
// since this concerns `part instances` outside the 'search' Working set
lVisibilityCtxToUse = lCurrentDMUVisibilityCtx;
}
let lPartDocuments : Array<number> | undefined = undefined;
let lLinkDocuments : Array<number> | undefined = undefined;
let lInstanceDocuments : Array<number> | undefined = undefined;

// find the `part instance ids` and `geometric instance ids` of this document
switch(lDocumentType)
{
case MetadataDocumentType.MDT_PartMetadata:
lPartDocuments = [lDocumentId];
break;
case MetadataDocumentType.MDT_LinkMetadata:
lLinkDocuments = [lDocumentId];
break;
default:
lInstanceDocuments = [lDocumentId];
break;
}
// find the `part instance ids` and `geometric instance ids` of this document
lDocumentIdConverter.convert(lPartDocuments, lLinkDocuments, lInstanceDocuments, lVisibilityCtxToUse);
}
}
};

// When the document `part instances` are found
// we get the relevant `part instance ids` and `geometric instance ids` of the requested document
const onDocumentIdConverterReady = (pEvent: InfiniteEvent) : void =>
{
const lEventDocumentIdConverter: DocumentIdConverterInterface = <DocumentIdConverterInterface>(pEvent.emitter);
// make sure the search in no more running
if (lEventDocumentIdConverter.isRunning()) {
console.assert(false, 'this should not happen');
return;
}
if (lEventDocumentIdConverter.getLastError() !== undefined) {
return;
}
const lResult: Array<DocumentIdConverterResultInterface> | undefined = lEventDocumentIdConverter.getConversionResult();
if (lResult && lResult.length === 1)
{
const lDocumentIdConverterInstances: Array<DocumentIdResultInterface> = lResult[0].getConvertedInstances();
const lPartInstanceIds: Uint32Array = new Uint32Array(lDocumentIdConverterInstances.length);

for (let i = 0; i < lDocumentIdConverterInstances.length; i += 1) {
lPartInstanceIds[i] = lDocumentIdConverterInstances[i].getPartInstanceId();
}
console.log('documents converted :');
console.log('Convert part instances to geometric instance ids: ' + JSON.stringify(lPartInstanceIds));
}
};

// what to do when we get the results ?
lDocumentIdConverter.addEventListener(DocumentIdConverterInterfaceSignal.DocumentIdConverterReady, onDocumentIdConverterReady);
lSearch.addEventListener(SearchInterfaceSignal.SearchReady, onSearchReady);

// make a search request, and only retrieve the "PartNumber" metadata of the result documents
// we will get all the documents of the DMU (fifth parameter : lCurrentDMUVisibilityCtx), but will get a hint of the
// documents inside lSearchVisibilityCtx
// imit the results to lMaxDocsToRetrieve documents maximum
lSearch.search(lQueryString, lSearchVisibilityCtx, lMaxDocsToRetrieve, ['PartNumber'], lCurrentDMUVisibilityCtx);

Or asynchronously :
/** 
* Sample to explain how to make asynchronous search requests.
*/
import {
SearchInterface, DocumentIdConverterInterface,
SearchDocumentResultInterface, DocumentIdResultInterface,
AsyncSearchResult, AsyncResultReason, AsyncSearchResultContent, AsyncDocumentIdConverterResultInterfaceResult,
DocumentIdConverterResultInterface, DataSessionInterface, MetadataDocumentType, WorkingSetInterface
} from 'generated_files/documentation/appinfiniteapi';

// the DataSessionInterface has been created previously and is connected
let lDataSession : DataSessionInterface;
// the Working set for the whole DMU as been set previously
let lCurrentDMUVisibilityCtx : WorkingSetInterface;

// the Working set for the search has been set previously (can be lCurrentDMUVisibilityCtx)
let lSearchVisibilityCtx : WorkingSetInterface;
// the string to search in documents
let lQueryString : string;
// the max number of results
const lMaxDocsToRetrieve : number = 50;

// create a search requester
const lSearch : SearchInterface = lDataSession.createSearch();

// to get actual results from a search request :
// the search requester gets result in the form of documents,
// in a second step, the user may enquire the server to know the
// relevant `part instance ids`
// the DocumentIdConverterInterface is there to make the conversion between
// a document id and the actual `part instances`
const lDocumentIdConverter : DocumentIdConverterInterface = lDataSession.createDocumentIdConverter();

const triggerSearchRequest = async () : Promise<void> =>
{
// make a search request, and only retrieve the "PartNumber" metadata of the result documents
// we will get all the documents of the DMU (fifth parameter : lCurrentDMUVisibilityCtx), but will get a hint of the
// documents inside lSearchVisibilityCtx
// limit the results to lMaxDocsToRetrieve documents maximum
const lResult : AsyncSearchResult = await lSearch.asyncSearch(lQueryString, lSearchVisibilityCtx, lMaxDocsToRetrieve, ['PartNumber'], lCurrentDMUVisibilityCtx);

if (lResult.reason !== AsyncResultReason.ARR_Success || lResult.value === undefined)
{
console.assert(false, 'this should not happen');
return;
}
// When the search is ready, we check for errors
// we may find all the `geometric instance ids` in the search result
// we get the first found document
// and find the relevant `part instance ids` and `geometric instance ids`

const lSearchContent : AsyncSearchResultContent = lResult.value;
// get all the `geometric instance ids` of the search request
const lGeometricInstanceIds: Uint32Array | undefined = lSearchContent.geometricInstanceIds;
if (lGeometricInstanceIds !== undefined)
{
console.log('all the geometric instances concerned by the search:' + lGeometricInstanceIds.length);
}

// and get the documents (content is filtered by the last parameter of SearchInterface.search)
const lSearchResult: Array<SearchDocumentResultInterface> | undefined = lSearchContent.searchDocuments;
if (!lSearchResult) {
console.assert(false, 'this should not happen');
return;
}
console.log('Search finished: ' + lSearchResult.length + ' result(s)');
// do we have all documents, or are there more that were not included due to the search results capped to lMaxDocsToRetrieve ?
if (lSearchContent.hasOtherResults)
{
// some GUI code there perhaps ?
console.log('Search was capped to ' + lMaxDocsToRetrieve);
}
if (lSearchResult.length <= 0) {
console.log('no document found');
return;
}
// get the `part instance ids` of the first document
const lDocumentId: number = lSearchResult[0].getDocumentId();
const lIsInVisibility : boolean = lSearchResult[0].isInWorkingSet();
const lDocumentType: MetadataDocumentType = lSearchResult[0].getDocumentType();
let lVisibilityCtxToUse : WorkingSetInterface;
if (lIsInVisibility)
{
console.log('retrieve document in visibility : ' + lDocumentId);
// we will try here to find instances only in the search Working set
// but depending on your needs, you may use lCurrentDMUVisibilityCtx to extend the
// result to the `part instances` of the whole DMU, it is up to you
// or make 2 requests, one in the search ctx, the other outside, or ....
lVisibilityCtxToUse = lSearchVisibilityCtx;
}
else {
// this case cannot happen if the third parameter to search is true
console.log('retrieve document outside visibility : ' + lDocumentId);
// in order to get results, we will make the conversion in the whole DMU Working set
// since this concerns `part instances` outside the 'search' Working set
lVisibilityCtxToUse = lCurrentDMUVisibilityCtx;
}
let lPartDocuments : Array<number> | undefined = undefined;
let lLinkDocuments : Array<number> | undefined = undefined;
let lInstanceDocuments : Array<number> | undefined = undefined;

// find the `part instance ids` and `geometric instance ids` of this document
switch(lDocumentType)
{
case MetadataDocumentType.MDT_PartMetadata:
lPartDocuments = [lDocumentId];
break;
case MetadataDocumentType.MDT_LinkMetadata:
lLinkDocuments = [lDocumentId];
break;
default:
lInstanceDocuments = [lDocumentId];
break;
}
const lConversion : AsyncDocumentIdConverterResultInterfaceResult = await lDocumentIdConverter.asyncConvert(lPartDocuments, lLinkDocuments, lInstanceDocuments, lVisibilityCtxToUse);

// When the document `part instances` are found
// we get the relevant `part instance ids` and `geometric instance ids` of the requested document
if (lConversion.reason !== AsyncResultReason.ARR_Success || lConversion.value === undefined)
{
console.assert(false, 'this should not happen');
return;
}
const lResultArray : Array<DocumentIdConverterResultInterface> = lConversion.value;
if(lResultArray.length !== 1)
{
console.assert(false, 'this should not happen');
return;
}
const lDocumentIdConverterInstances: Array<DocumentIdResultInterface> = lResultArray[0].getConvertedInstances();
const lPartInstanceIds: Uint32Array = new Uint32Array(lDocumentIdConverterInstances.length);

for (let i = 0; i < lDocumentIdConverterInstances.length; i += 1) {
lPartInstanceIds[i] = lDocumentIdConverterInstances[i].getPartInstanceId();
}
console.log('documents converted :');
console.log('Convert part instances to geometric instance ids: ' + JSON.stringify(lPartInstanceIds));
};

triggerSearchRequest();

Please make sure the destination browser supports promises before using async calls.
Converters

interface DocumentIdConverterInterface {
    addEventListener(pType, pListener, pObject): string;
    addEventListener(pType, pListener): string;
    areSignalsBlocked(): boolean;
    asyncConvert(pPartDocumentIds, pLinkDocumentIds, pInstanceDocumentIds, pWorkingSetContext): Promise<AsyncDocumentIdConverterResultInterfaceResult>;
    blockSignals(pBlock): void;
    cancel(): boolean;
    convert(pPartDocumentIds, pLinkDocumentIds, pInstanceDocumentIds, pWorkingSetContext): boolean;
    dispose(): void;
    getConversionResult(): DocumentIdConverterResultInterface[];
    getInfiniteObjectType(): InfiniteObjectType;
    getLastError(): InfiniteError;
    getLastRequestId(): string;
    hasEventListener(pType, pListener): boolean;
    hasEventListenerById(pId): boolean;
    isCancelled(): boolean;
    isDisposed(): boolean;
    isRunning(): boolean;
    removeAllEventListeners(): boolean;
    removeEventListener(pType, pListener, pObject): boolean;
    removeEventListener(pType, pListener): boolean;
    removeEventListenerById(pId): boolean;
}

Hierarchy (view full)

Methods

  • Adds a listener to an event type.

    When an event of the type pType fires, the callback pListener will be called. This function returns a unique string id that may be used in removeEventListenerById to allow simple listener removal. It is possible to add an object that will be included in the callback to avoid creating too many closures. Calling twice addEventListener with the same parameters results in the second call to be ignored, only unique pairs callback / object are allowed, in order to avoid calling multiple times the same thing.

    Parameters

    • pType: string
      in
      The type of the event pListener will be called upon.
    • pListener: tListenerCallback
      in
      The listener function that fires when the given event type occurs.
    • pObject: Object
      in
      The optional object the callback will be called with when the given event fires.

    Returns string

    The id of the inserted callback (actually an UUID).

  • Adds a listener to an event type.

    When an event of the type pType fires, the callback pListener will be called. This function returns a unique string id that may be used in removeEventListenerById to allow simple listener removal.

    Parameters

    • pType: string
      in
      The type of the event pListener will be called upon.
    • pListener: tListenerCallback
      in
      The listener function that fires when the given event type occurs.

    Returns string

    The id of the inserted callback (actually an UUID).

  • Tells if signals sent by the object are blocked or not.

    If signals are blocked, no signal will be emitted nor buffered, such signal will be lost.

    Returns boolean

    true if signals are blocked.

  • Asynchronously triggers a request to "translate" the given metadata document id to the corresponding couple {part instance id,geometric instance id}.

    The server will try to find all part instances that are linked to the given document in the given WorkingSetInterface. A promised is returned, that is either rejected in case of an error, or resolved with the corresponding DocumentIdConverterResultInterface. Due to performance limitation, if the number of part instances exceeded 1000, the converter returns an error.

    Returns a promise.

    Please note that in case of multiple promises running at the same time on the same DocumentIdConverterInterface, the first promises will be signalled as cancelled, the last as ok, but all calls to getConversionResult after awaiting will return the same value.

    If pWorkingSetContext is modified during the execution, then the call is cancelled (see cancel).

    Parameters

    • pPartDocumentIds: number[] | Uint32Array
      in
      The part metadata document ids to fetch data from.
    • pLinkDocumentIds: number[] | Uint32Array
      in
      The link metadata document ids to fetch data from.
    • pInstanceDocumentIds: number[] | Uint32Array
      in
      The instance metadata document ids to fetch data from.
    • pWorkingSetContext: WorkingSetInterface
      in
      The WorkingSetInterface to use when "converting" to a list of part instance ids.

    Returns Promise<AsyncDocumentIdConverterResultInterfaceResult>

    A promise. The promise is resolved with the reason (success, cancelled, disposed, bad input). In case of success, the promise contains the conversion result.

  • Blocks / Unblocks all signals sent by the object.

    If signals are blocked, no signal will be emitted nor buffered, such signal will be lost.

    Parameters

    • pBlock: boolean
      in
      If set to true, all further signals will be silently discarded.

    Returns void

  • Triggers a request to "translate" the given metadata document id to the corresponding couple {part instance id,geometric instance id}.

    The server will try to find all part instances that are linked to the given document in the given WorkingSetInterface. An event DocumentIdConverterInterfaceSignal.DocumentIdConverterReady is fired when the translation is finished, use getLastError() to check if it was correctly performed. Due to performance limitation, if the number of part instances exceeded 1000, the converter return an error.

    Returns true if the "conversion" is started. If not, just call getLastError to get the reason why the procedure failed.

    If pWorkingSetContext is modified during the execution, then the call is cancelled (see cancel).

    Parameters

    • pPartDocumentIds: number[] | Uint32Array
      in
      The part metadata document ids to fetch data from.
    • pLinkDocumentIds: number[] | Uint32Array
      in
      The link metadata document ids to fetch data from.
    • pInstanceDocumentIds: number[] | Uint32Array
      in
      The instance metadata document ids to fetch data from.
    • pWorkingSetContext: WorkingSetInterface
      in
      The WorkingSetInterface to use when "converting" to a list of part instance ids.

    Returns boolean

    true if the conversion process has started, just wait for DocumentIdConverterInterfaceSignal.DocumentIdConverterReady.

  • Gets the last error returned by the convert call of the DocumentIdConverterInterface.

    Returns InfiniteError

    The last error (if any, or undefined if no error occurred).

  • Each call to convert is assigned a request id.

    This call tels the id of the last call to convert.

    Returns string

    The id of the last call to convert.

  • Tells if the EventDispatcher has such a callback registered for the given event type.

    Parameters

    • pType: string
      in
      The type of the event to test.
    • pListener: tListenerCallback
      in
      The listener function that gets tested.

    Returns boolean

    true if such a listener is installed for the given type of event.

  • Tells if the EventDispatcher has such a callback registered for the given callback id.

    Parameters

    • pId: string
      in
      The id of the callback to test.

    Returns boolean

    true if such a listener is installed for the given callback id.

  • Tells if the DocumentIdConverterInterface has been cancelled.

    This is generally the case after calling cancel when the DocumentIdConverterInterface is retrieving data.

    Returns boolean

    true if the DocumentIdConverterInterface is cancelled.

  • Tells if the DocumentIdConverterInterface is converting data.

    This is the case after calling convert.

    Returns boolean

    true if the DocumentIdConverterInterface is converting.

  • Removes a listener from an event type.

    If no such listener is found, then the function returns false and does nothing. You must use the exact parameters that were used in addEventListener to actually remove the listener.

    Parameters

    • pType: string
      in
      The type of the listener that gets removed.
    • pListener: tListenerCallback

      The listener function that gets removed.

    • pObject: Object

      The listener object that was used when addEventListener was called.

    Returns boolean

    true if the callback was removed else false.

  • Removes a listener from an event type.

    If no such listener is found, then the function returns false and does nothing. You must use the exact parameters that were used in addEventListener to actually remove the listener.

    Parameters

    • pType: string
      in
      The type of the listener that gets removed.
    • pListener: tListenerCallback

      The listener function that gets removed.

    Returns boolean

    true if the callback was removed else false.

  • Removes a listener by its id.

    If no such listener is found, then the function returns false and does nothing. You must use the return value of addEventListener to actually remove the listener.

    Parameters

    • pId: string
      in
      The id returned by the call to addEventListener that you want to remove.

    Returns boolean

    true if the callback was removed else false.