Problem Statement :Use ITK and PLM XML export to export BOM
The following example shows how to use ITK to export a BOM view revision
PLM XML: Code Taken from server customization guide PDF
PIE_create_session(&session)
PIE_session_set_file(session, xmlFileName)
PIE_session_set_log_file(session, logFileName)
PIE_find_transfer_mode("ConfiguredDataExportDefault", "", &n_transfer_modes, &transfer_modes)
PIE_session_set_revision_rule(tSession,tRevRule);
PIE_session_set_transfer_mode(session, transfer_modes[0])
PIE_session_export_objects(session, n_objects, objects)
The following example shows how to use ITK to export a BOM view revision
PLM XML: Code Taken from server customization guide PDF
#include <stdlib.h> #include <tc/tc.h> #include <tc/emh.h> #include <tccore/item.h> #include <itk/mem.h> #include <pie/pie.h> #include <bom/bom.h> #define SampleError 1 #define EXIT_FAILURE 1 #define ERROR_CHECK(x) { \ int stat; \ char *err_string; \ if( (stat = (x)) != ITK_ok) \ { \ EMH_get_error_string (NULLTAG, stat, &err_string); \ printf ("ERROR: %d ERROR MSG: %s.\n", stat, err_string); \ printf ("FUNCTION: %s\nFILE: %s LINE: %d\n",#x, __FILE__, __LINE__); \ if(err_string) MEM_free(err_string); \ exit (EXIT_FAILURE); \ } \ } int ITK_user_main(int argc, char* argv[]); static void initialize ( char *usr , char *upw , char *ugp); static void display_help_message(void); static int find_topline_of_itemid(char *itemid,char *rev, int *n_tags, tag_t **tags); static int export_bvr(); /* Main */ int ITK_user_main(int argc, char* argv[]) { int status = 0; if ( argc <= 6 ) { display_help_message(); return( SampleError); } char *usr = ITK_ask_cli_argument( "-u="); char *upw = ITK_ask_cli_argument( "-p="); char *ugp = ITK_ask_cli_argument( "-g="); initialize ( usr , upw , ugp ); ITK_set_journalling(TRUE); export_bvr(); ITK_exit_module(TRUE); return status; } /* Do BVR export */ static int export_bvr() { int max_char_size = 80; char *xmlFileName; char *logFileName = (char *) MEM_alloc(max_char_size * sizeof(char)); char *itemid; char *rev; int n_objects = 0; tag_t *objects = NULL; // Create PIE session tag_t session; ERROR_CHECK( PIE_create_session(&session) ); if ( (xmlFileName = ITK_ask_cli_argument( "-file=" )) == NULL ) { display_help_message(); return ( SampleError ); } // Set the name of the XML file to export ERROR_CHECK( PIE_session_set_file(session, xmlFileName) ); // Set the name of the log file sprintf(logFileName, "%s.log", xmlFileName); ERROR_CHECK( PIE_session_set_log_file(session, logFileName) ); // get item id if ( (itemid = ITK_ask_cli_argument( "-item=" )) == NULL ) { display_help_message(); return ( SampleError ); } // Get item revision if ( (rev = ITK_ask_cli_argument( "-rev=" )) == NULL ) { display_help_message(); return ( SampleError ); } // Get tranfermode int n_transfer_modes; tag_t *transfer_modes; ERROR_CHECK( PIE_find_transfer_mode("ConfiguredDataExportDefault", "", &n_transfer_modes, &transfer_modes) ); if( n_transfer_modes == 0 ) { printf("Error in finding default transfer mode\n"); return(SampleError); } // Set the transfermode on the sessionion ERROR_CHECK( PIE_session_set_transfer_mode(session, transfer_modes[0]) ); //To export the translations of a localizable properties, call PIE__set_export_languages // with the language codes that you are interested in to set the locales to PIE Session. // Get the topline of this item to export ERROR_CHECK( find_topline_of_itemid(itemid, rev, &n_objects, &objects) ) ; // Pass in the list of objects and do the export ERROR_CHECK( PIE_session_export_objects(session, n_objects, objects) ); // Delete the session ERROR_CHECK( PIE_delete_session(session) ); MEM_free(logFileName); return( ITK_ok ); } /* Login */ static void initialize ( char *usr , char *upw , char *ugp) { int status = ITK_ok; char *message; ITK_initialize_text_services( 0 ); if ( ITK_ask_cli_argument( "-h" ) != 0 ) { display_help_message(); exit( EXIT_FAILURE ); } status = ITK_init_module ( usr , upw , ugp ); if (status != ITK_ok) { EMH_ask_error_text (status, &message); printf("Error with ITK_auto_login: \"%d\", \"%s\"\n", status, message); MEM_free(message); return ; } else { printf ("login to database successful.\n"); } } /* Find topline for this item */ static int find_topline_of_itemid(char *itemid,char *rev, int *n_tags, tag_t **tags) { tag_t itemTag = NULLTAG; tag_t rev_tag = NULLTAG; int local_num_tags = 0; tag_t *local_tags = NULL; // Find the required item //API Deprecated ERROR_CHECK( ITEM_find_item (itemid, &itemTag) ); if(itemTag == NULLTAG) { return(SampleError); } //Export only if rev is provided if (rev != NULL) { // Get item revision tag//API Deprecated ERROR_CHECK( ITEM_find_rev(itemid,rev, &rev_tag) ); tag_t window = NULLTAG; tag_t top_line = NULLTAG; // Create a window for BVR export of this item ERROR_CHECK( BOM_create_window(&window) ); local_num_tags = 1; local_tags = (tag_t *) MEM_alloc(sizeof(tag_t) * 1); local_tags[0] = window; // Set this item as topline to export ERROR_CHECK( BOM_set_window_top_line(window,itemTag,rev_tag,NULLTAG,&top_line) ); local_num_tags++; local_tags = (tag_t *) MEM_realloc (local_tags, sizeof(tag_t) * local_num_tags); local_tags[local_num_tags-1] = top_line; } *n_tags = local_num_tags; *tags = local_tags; return ITK_ok; } /* Displays help messgage */ static void display_help_message(void) { printf( "\n\nsample_plmxml_itk_export: PLMXML export of a simple BVR" ); printf( "\n\nUSAGE: sample_plmxml_itk_export -u=username -p=password -g=groupname -item=itemname -rev=itemrevision -file=filename"); printf( "\n -h displays this message"); }Explanation : Important API
PIE_create_session(&session)
PIE_session_set_file(session, xmlFileName)
PIE_session_set_log_file(session, logFileName)
PIE_find_transfer_mode("ConfiguredDataExportDefault", "", &n_transfer_modes, &transfer_modes)
PIE_session_set_revision_rule(tSession,tRevRule);
PIE_session_set_transfer_mode(session, transfer_modes[0])
PIE_session_export_objects(session, n_objects, objects)
In this statement "transfer_modes[0]" why use zero
ReplyDeleteWhy use “0”
ReplyDeleteThere is only one transfer mode in the array(transfer_modes[]), hence to select that one from the array it is written as transfer_modes[0].
ReplyDeleteCool and that i have a super provide: How Long Renovate House house renovation toronto
ReplyDeleteYou have illustrated Teamcenter PLM very nicely in this article and interested candidates can easily understand this technology. Teamcenter operating system is an updates, flexible product lifecycle management (PLM) system that links people and processes, across functional storehouse, with a digital thread for transformation. If anyone willing to learn this Teamcenter PLM technology or upskill himself in this cloud technology one can kindly contact https://www.maxmunus.com/page/teamcenter-plm-training
ReplyDeleteOr kindly check https://www.youtube.com/watch?v=OdeBh2RFoJk