Problem Statement :
Assign the created object to Project depending on m5_ProjectCode attribute value.
This should be called at post action of creation.
(Once you register your customization in Teamcenter preference TC_Customization_Libraries this customization will get called on post action of creation of item)
Snapshot provides the details about Item message parameters .
METHOD_find_method("Item", ITEM_create_msg, &method)
METHOD_add_action(method, METHOD_post_action_type, (METHOD_function_t) createpost_method_1, NULL)
PROJ_find(ObjProject,&projobj)
PROJ_assign_objects(1 ,&projobj ,1 ,&tagItem )
Assign the created object to Project depending on m5_ProjectCode attribute value.
This should be called at post action of creation.
(Once you register your customization in Teamcenter preference TC_Customization_Libraries this customization will get called on post action of creation of item)
Snapshot provides the details about Item message parameters .
#include <tc/tc.h> #include <custom.h> #include <dataset.h> #include <epm/epm.h> #include <ict_userservice.h> #include <method.h> #include <property/prop.h> #include <property/prop_errors.h> #include <property/prop_msg.h> #include <reservation.h> #include <stdarg.h> #include <string.h> #include <tc.h> #include <tc/emh_const.h> #include <tc/envelope.h> #include <tc/emh.h> #include <tccore/aom.h> #include <tccore/aom_prop.h> #include <tccore/custom.h> #include <tccore/item.h> #include <tccore/item_errors.h> #include <tccore/item_msg.h> #include <tccore/method.h> #include <tccore/tctype.h> #include <tccore/workspaceobject.h> #include <tcfile.h> #include <tctype.h> #include <item_errors.h> #include <user_exits/user_exits.h> #include <workspaceobject.h> #include <project.h>Explanation : Important APIstatic int PrintErrorStack( void ) { int iNumErrs = 0; int *pSevLst = NULL; int *pErrCdeLst = NULL; char **pMsgLst = NULL; register int i = 0; EMH_ask_errors( &iNumErrs, &pSevLst, &pErrCdeLst, &pMsgLst ); fprintf( stderr, "Error(s): \n"); for ( i = 0; i < iNumErrs; i++ ) { fprintf( stderr, "\t%6d: %s\n", pErrCdeLst[i], pMsgLst[i] ); } return ITK_ok; }extern DLLAPI int createpost_method_1(METHOD_message_t *m, va_list args) { const char* item_id; const char* item_name; const char* type_name; const char* rev_id; tag_t* new_item_tag; tag_t* new_rev_tag; tag_t item_master_form_tag; tag_t item_rev_master_form_tag; tag_t tagItem=NULLTAG; tag_t tagItemRev=NULLTAG; tag_t objTypeTag; tag_t projobj; char *ObjProject = NULL; char* itemTagString=NULL; char* itemRevTagString=NULL; char type_name1[TCTYPE_name_size_c+1]; //Refer snapshot for how do we know about this parameters item_id = va_arg(args, const char*); item_name = va_arg(args, const char*); type_name = va_arg(args, const char*); rev_id = va_arg(args, const char*); new_item_tag = va_arg(args, tag_t *); new_rev_tag = va_arg(args, tag_t *); item_master_form_tag = va_arg(args, tag_t); item_rev_master_form_tag= va_arg(args, tag_t); tagItem=*new_item_tag; tagItemRev=*new_rev_tag; //Find the object type tag for input tagItemRev if (TCTYPE_ask_object_type(tagItemRev,&objTypeTag)!=ITK_ok)PrintErrorStack(); //Get the name of object if (TCTYPE_ask_name(objTypeTag,type_name1)!=ITK_ok)PrintErrorStack(); printf("\n type_name = %s\n", type_name1); if (AOM_get_value_string(tagItemRev,"m5_ProjectCode",&ObjProject))PrintErrorStack(); printf("\nProject from Object : %s\n",ObjProject); if(strcmp(ObjProject,"")) { //Find the project in Teamcenter with ObjProject if (PROJ_find(ObjProject,&projobj) !=ITK_ok)PrintErrorStack(); if(projobj !=NULLTAG) { //Assign the project to an object if (PROJ_assign_objects(1 ,&projobj ,1 ,&tagItem )!=ITK_ok)PrintErrorStack(); printf("\nAssigned to Project\n"); } else { printf("\nProject not found\n"); } } else { printf("\nProject Code attribute found NULL on object. Project will not be assigned\n"); } printf("\nPost Creation.....done\n"); return ITK_ok; }extern int createpost_register_method(int *decision, va_list args) { METHOD_id_t method; *decision = ALL_CUSTOMIZATIONS; //Find the method to which we extend to add post action if ( METHOD_find_method("Item", ITEM_create_msg, &method) !=ITK_ok) PrintErrorStack(); if (method.id != NULLTAG) { //Register the method to be called on post action of ITEM_create_msg if( METHOD_add_action(method, METHOD_post_action_type, (METHOD_function_t) createpost_method_1, NULL)!=ITK_ok) PrintErrorStack(); printf("Registered as Post-Action for Creation\n"); } else printf("Method not found!\n"); return ITK_ok; }//Function get loaded when TC_Customization_Libraries preference are loaded by teamcenter //This library must be added in TC_Customization_Libraries preference as createpost extern DLLAPI int createpost_register_callbacks () { printf("\n\ncreatepost_register_callbacks changed\n\n"); //Once this function get loaded createpost_register_method will be called if(CUSTOM_register_exit ( "createpost", "USER_init_module", (CUSTOM_EXIT_ftn_t) createpost_register_method) !=ITK_ok) PrintErrorStack(); return ( ITK_ok ); }
METHOD_find_method("Item", ITEM_create_msg, &method)
METHOD_add_action(method, METHOD_post_action_type, (METHOD_function_t) createpost_method_1, NULL)
PROJ_find(ObjProject,&projobj)
PROJ_assign_objects(1 ,&projobj ,1 ,&tagItem )
Can you share an example to create a post-action in BMIDE itself?
ReplyDeleteSure, I will definitely provide the example soon
ReplyDeleteError 13 error LNK2019: unresolved external symbol TYPE_ask_type referenced in function A5_new_post_action c:\Users\administrator\documents\visual studio 2013\Projects\Win32Project2\Win32Project2\Extension3.obj Win32Project2
ReplyDeletecan you please suggest for this error?
You are missing header file
Delete