You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

228 lines
8.8 KiB

/* Copyright 2020 Siemens Digital Industries Software
==================================================
Copyright 2014.
Siemens Product Lifecycle Management Software Inc.
All Rights Reserved.
==================================================
Copyright 2020 Siemens Digital Industries Software */
/**
@defgroup BO BusinessObject (Metaframework)
@ingroup TC
Teamcenter has implemented ITK level functions that allow programmers
to register and recover Teamcenter business objects. Those business objects
are stored in a registry (cache) of recoverable business objects.
The ITK functions for session recovery include:
<ul>
<li>A function to retrieve a business object so it can be recovered later.
<li>A function to determine if a business object is recoverable.
<li>A function to retrieve the tag of a recoverable business object.
<li>A function to retrieve the UID of a recoverable business object.
</ul>
To use these functions, include session_recovery.h.
@{
*/
#ifndef SESSION_RECOVERY_H
#define SESSION_RECOVERY_H
#include <unidefs.h>
#include <metaframework/libmetaframework_exports.h>
/**
A Reconstruct function pointer for recoverable business objects registered by BO_register_recoverable_business_object.
*/
typedef int(*ReconstructFn)(
const char * recipe, /**< (I) Recipe for reconstruction the recoverable business object */
tag_t * bus_obj_tag /**< (I) Recipe for reconstruction the recoverable business object */
);
/**
A Get Recoverable key function pointer for recoverable business objects registered by BO_register_recoverable_business_object
*/
typedef char *(*RecoverableKeyFn)(
const char * recipe_uid /**< (I) UID of the recipe */
);
#ifdef __cplusplus
extern "C"{
#endif
/**
Retrieves the tag associated with the uid of a recoverable object. The @p uid must be formatted
for server usage only, e.g. a version output by #BO_get_recoverable_object_uid.
@returns
<ul>
<li>#ITK_ok on success
<li>#POM_op_not_supported if the @p uid is null.
<li>#POM_component_id_not_found if there is no recipe for the @p uid.
<li>#ITK_internal_error if other errors occur. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_get_recoverable_object_tag(
const char * uid, /**< (I) UID of object to recover */
logical persist_recipe, /**< (I) Indicates if the recipe should be persisted to the db */
tag_t * tag /**< (O) Tag of recoverable object */
);
/**
Finds a recoverable object tag in the runtime cache. The @p uid must be formatted
for server usage only, e.g. a version output by #BO_get_recoverable_object_uid.
<br/>If no tag can be found using the @p uid, no object is created. If the object
needs to be created, use #BO_get_recoverable_object_tag.
@returns
<ul>
<li>#ITK_ok on success
<li>#POM_op_not_supported if the @p uid value is null.
<li>#POM_component_id_not_found if there is no recipe for the @p uid.
<li>#ITK_internal_error if other errors occur. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_lookup_recoverable_object_tag(
const char * uid, /**< (I) UID of object to recover */
logical persist_recipe, /**< (I) Indicates if the recipe should be persisted to the db */
tag_t * tag /**< (O) Tag of recoverable object */
);
/**
Retrieves the uid associated with a recoverable object. This uid is suitable for usage on
the server only and will be formatted for session recovery if the object is session recoverable.
<br/>If a uid that is valid for round trips between the server and client is required, please use
#BO_get_recoverable_object_uid_stateless.
@returns
<ul>
<li>#ITK_ok on success
<li>#TYPE_unknown_type if @p bus_obj_tag is of an unknown type.
<li>#ITK_internal_error if an internal error has occurred. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_get_recoverable_object_uid(
tag_t bus_obj_tag, /**< (I) The tag of a Teamcenter business object */
logical persist_recipe, /**< (I) Indicates if the recipe should be persisted to the database */
char** uid /**< (OF) The UID for the input Teamcenter business object */
);
/**
Retrieves the tag associated with the UID of a recoverable object. The input @p uid
must be formatted for server and client usage, e.g. a version output by
#BO_get_recoverable_object_uid_stateless.
<br/>An empty @p uid will not cause an error and will output a #NULLTAG.
@returns
<ul>
<li>#ITK_ok on success
<li>#ITK_internal_error if the @p uid is null or other internal errors occurred. Check the Teamcenter system log for more information.
<li>#METAFRAMEWORK_smartuid_unsupported_version if the @p uid provided is not properly formatted.
</ul>
*/
extern METAFRAMEWORK_API int BO_get_recoverable_object_tag_stateless(
const char * uid, /**< (I) UID of object to recover */
tag_t * tag /**< (O) The recoverable object */
);
/**
Retrieves the uid associated with a business object that is suitable for round trips between the
server and a stateful client. If the object is session recoverable, the uid is valid for round trips
between the server and both stateful or stateless clients.
<br/>A NULLTAG input will not cause any error and will produce an ouput UID that is an empty string.
@returns
<ul>
<li>#ITK_ok on success
<li>#TYPE_unknown_type if @p business_object is of an unknown type.
<li>#ITK_internal_error if other errors occur. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_get_recoverable_object_uid_stateless(
const tag_t business_object, /**< (I) A Teamcenter business object */
char ** uid /**< (OF) The UID for the input Teamcenter business object */
);
/**
Retrieves the uid associated with a recoverable object. This uid is suitable for usage on
the server only and should be formatted as session-recoverable UID by the caller.
This uid will always be cached in the object.
@returns
<ul>
<li>#ITK_ok on success
<li>#TYPE_unknown_type if @p bus_obj_tag is of an unknown type.
<li>#ITK_internal_error if an internal error has occurred. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_get_recoverable_object_uid_cached(
tag_t bus_obj_tag, /**< (I) The tag of a Teamcenter business object */
logical persist_recipe, /**< (I) Indicates if the recipe should be persisted to the database */
char** uid /**< (OF) The UID for the input Teamcenter business object */
);
/**
Checks whether the business object is recoverable and whether or not the recipe is persisted to the database.
@returns
<ul>
<li>#ITK_ok on success.
<li>#ITK_internal_error if an internal error has occurred. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_is_recoverable(
tag_t obj_tag, /**< (I) The tag of the Teamcenter object */
logical * is_recoverable, /**< (O) True if the object is recoverable. False if it is not. */
logical * persist_recipe /**< (O) Indicates whether the recipe should be persisted to the DB */
);
/**
Registers a business object class for recovery.
@returns
<ul>
<li>#ITK_ok on success
<li>#METAFRAMEWORK_invalid_BusinessObject if the input name is not a valid Business Object name
</ul>
*/
extern METAFRAMEWORK_API int BO_register_recoverable_business_object(
const char * name, /**< (I) Name to Register */
ReconstructFn fn, /**< (I) Funtion pointer to the function used to recover the Teamcenter BusinessObject */
RecoverableKeyFn key_function /**< (I) Function pointer to the recoverable Key function. */
);
/**
Removes an entry corresponding to @p uid if present in the cache of recoverable business objects.
The @p uid may be formatted for server usage (e.g. a version output by #BO_get_recoverable_object_uid
or #BO_get_recoverable_object_uid_cached) or for round-trip usage (e.g. a version output by
#BO_get_recoverable_object_uid_stateless).
@returns
<ul>
<li>#ITK_ok on success.
<li>#ITK_internal_error if other errors occur. Check the Teamcenter system log for more information.
</ul>
*/
extern METAFRAMEWORK_API int BO_remove_recoverable_business_object(
const char* uid /**< (I) UID of business object to be removed. */
);
/** @} */
#ifdef __cplusplus
}
#endif
#include <metaframework/libmetaframework_undef.h>
#endif