Problem statement:
Upload dataset in Teamcenter using ITK APIs.
Here we will learn ITK APIs which will be very helpful in data migration projects.
AE_find_datasettype ("MSExcel",&datasettype_tag); AE_ask_datasettype_def_tool(datasettype_tag,&default_tool_tag); AE_create_dataset_with_id(datasettype_tag, new_name1,"Loading Bulk Dataset", 0, 0, &tDataset) AE_set_dataset_format(tDataset,"BINARY_REF")
AE_set_dataset_tool(tDataset,default_tool_tag) AE_ask_datasettype_refs(datasettype_tag,&count,&list)
IMF_import_file ("/home/req83/Deliverable.xls",NULL,SS_BINARY,&imannewFileTag,&filedescriptor)
IMF_set_original_file_name(imannewFileTag,new_name2) AE_add_dataset_named_ref(tDataset,list[0],SS_BINARY,imannewFileTag)
Here we will learn ITK APIs which will be very helpful in data migration projects.
#include <ae/ae.h> #include <ae/datasettype.h> #include <ae/nxsm.h> #include <custom.h> #include <dataset.h> #include <ecm/ecm.h> #include <epm/epm.h> #include <folder.h> #include <form/form.h> #include <ict_userservice.h> #include <item_errors.h> #include <itk/mem.h> #include <property/prop.h> #include <property/prop_errors.h> #include <property/prop_msg.h> #include <stdarg.h> #include <string.h> #include <tc.h> #include <tc/emh.h> #include <tc/emh_const.h> #include <tc/tc.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/method.h> #include <tccore/tctype.h> #include <tccore/workspaceobject.h> #include <tcinit/tcinit.h> #include <time.h> #define CALLAPI(expr)ITKCALL(ifail = expr); if(ifail != ITK_ok)return ifail;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; }int save_object (tag_t object_tag) { int ReturnCode; /* Save the object. */ ReturnCode = AOM_save (object_tag); if (ReturnCode != ITK_ok) { //output_error ("ERROR %d save object.\n", ReturnCode); return (ReturnCode); } /* Unlock the object. */ ReturnCode = AOM_unlock (object_tag); return (ReturnCode); }int trim(char *str) { char *ptr = NULL; int i,j=0; ptr = (char*)malloc((strlen(str)+1) * 2); for(i=0;str[i]!='\0';i++) { if (str[i] != ' ' && str[i] != '\t') ptr[j++]=str[i]; } ptr[j]='\0'; str=ptr; free(ptr); return 0; }extern int ITK_user_main( int argc, char **argv ) { char *file1 = NULL; char *LineRead1 = NULL; FILE *fp1; char mystring1 [10000]; char *RqmtID = NULL; tag_t my_dataset = NULLTAG; char * new_name1 = NULL; char * new_name2 = NULL; char **list; int ifail; int n_items =0; int backVal = 0; int count= 0; IMF_file_t fileDescriptor ; tag_t datasettype_tag= NULLTAG; tag_t default_tool_tag; tag_t newfile = NULLTAG; tag_t newFileTag = NULLTAG; tag_t imannewFileTag = NULLTAG; AE_reference_type_t reference_type; IMF_file_t filedescriptor; //ITK_initialize_text_services : Initializes the Teamcenter text services. This is necessary to get the correct //error strings when you use EMH_get_error_string, or by certain other Teamcenter functions that make use of text services, like //forms //Paramter The value is not used anymore ITK_initialize_text_services( ITK_BATCH_TEXT_MODE ); ifail = ITK_auto_login (); new_name1=(char*)MEM_alloc(sizeof(char)*120); new_name2=(char*)MEM_alloc(sizeof(char)*120); LineRead1=malloc(30000); file1=ITK_ask_cli_argument("-i="); printf("\n Input file1 is--> %s \n ",file1); fp1=fopen(file1,"r"); //Find the dataset type object for specified type->MSExcel AE_find_datasettype ("MSExcel",&datasettype_tag); //Get the defualt tool object for the dataset type AE_ask_datasettype_def_tool(datasettype_tag,&default_tool_tag); if(fp1==NULL) { printf("\n Error in opening the file1 \n"); } else { printf("\n File1 is successfully opened \n"); while(fgets(mystring1,200000,fp1) !=NULL) { if(mystring1) { strcpy(LineRead1,mystring1); printf("\n mystring1 %s ",mystring1); printf("\n LineRead1 %s ",LineRead1); } RqmtID=strtok(LineRead1,"\n"); printf("\n RqmtID %s ",RqmtID ); printf("\n Req item%s\n",RqmtID);fflush(stdout); strcpy(new_name1,RqmtID); printf("\n new_name1 %s\n",new_name1);fflush(stdout); backVal = trim(new_name1); printf("\n new_name1: %s\n",new_name1);fflush(stdout); strcpy(new_name2,new_name1); strcat(new_name2,".xls"); printf("\n new_name2: %s\n",new_name2);fflush(stdout); //Get the dataset with defined criteria CALLAPI(AE_find_all_datasets(new_name1,&n_items,&item_tags)); if (n_items >= 1) { printf("\nDataset is already avaialbe\n");fflush(stdout); } else { printf("\n 44444444444444444444444 \n");fflush(stdout); //Create Dataset of specified type(datasettype_tag) and with other attibutes CALLAPI(AE_create_dataset_with_id(datasettype_tag, new_name1,"Loading Bulk Dataset", 0, 0, &tDataset)); printf("\n 5555555555555555 \n");fflush(stdout); //Set dataset format CALLAPI(AE_set_dataset_format(tDataset,"BINARY_REF")); //Set the tool(tool with which this dataset to be open) for Specified dataset CALLAPI(AE_set_dataset_tool(tDataset,default_tool_tag)); //Get the references for the dataset //In which we insert the actual datset file CALLAPI(AE_ask_datasettype_refs(datasettype_tag,&count,&list)); //Import the file in Teamcenter if ( IMF_import_file ("/home/req83/Deliverable.xls",NULL,SS_BINARY,&imannewFileTag,&filedescriptor) !=ITK_ok ) PrintErrorStack(); //Set the original name property for file if ( IMF_set_original_file_name(imannewFileTag,new_name2) !=ITK_ok ) PrintErrorStack(); //Save the uploaded file save_object(imannewFileTag); //Add the imported file into dataset as named reference if (AE_add_dataset_named_ref(tDataset,list[0],SS_BINARY,imannewFileTag) !=ITK_ok ) PrintErrorStack(); //if ( AE_import_named_ref (tDataset,"excel","/home/req83/Deliverable.xls",new_name2,SS_BINARY) !=ITK_ok ) PrintErrorStack(); //Save the dataset save_object(tDataset); printf("\nDataset is created\n");fflush(stdout); } } fclose (fp1); } return ( ITK_ok ); }
AE_find_datasettype ("MSExcel",&datasettype_tag); AE_ask_datasettype_def_tool(datasettype_tag,&default_tool_tag); AE_create_dataset_with_id(datasettype_tag, new_name1,"Loading Bulk Dataset", 0, 0, &tDataset) AE_set_dataset_format(tDataset,"BINARY_REF")
AE_set_dataset_tool(tDataset,default_tool_tag) AE_ask_datasettype_refs(datasettype_tag,&count,&list)
IMF_import_file ("/home/req83/Deliverable.xls",NULL,SS_BINARY,&imannewFileTag,&filedescriptor)
IMF_set_original_file_name(imannewFileTag,new_name2) AE_add_dataset_named_ref(tDataset,list[0],SS_BINARY,imannewFileTag)
No comments:
Post a Comment