Problem Statement : Get all the item & it's dataset present in teamcneter.
Solution:
POM_enquiry_create (enqid)
POM_enquiry_add_select_attrs (enqid,"Item", 1,select_attrs)
POM_enquiry_execute (enqid, &n_rows, &n_cols,&values)
Solution:
#include"TC_Data_Report.h"
#include<iostream>
using namespace std;
static int PrintErrorStack( void )
{
int iNumErrs = 0;
const int *pSevLst = 0;
const int *pErrCdeLst = 0;
const 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 ITK_user_main ( int argc , char* argv[] )
{
//getchar();
char *out_file_name = "Itemdetails.csv"; /* Output file name */
char *out_Datasetfile_name = "DatasetDetails.csv"; /* Output file name */
char *objectname = NULL;
char *revisionid = NULL;
char *datasetname = NULL;
char *item_revision_id = NULL;
char *object_desc = NULL;
char *owning_user = NULL;
char *project_ids = NULL;
char *last_mod_user = NULL;
char *release_status_list = NULL;
char *date_format = NULL;
char *lastmoddate_string = NULL;
char *creationdate_string = NULL;
char *userId = NULL;
char *password = NULL;
char *group = NULL;
char *errormsg = NULL;
date_t creation_date = NULLDATE;
date_t last_mod_date = NULLDATE;
char type_name[TCTYPE_name_size_c+1];
char refname[AE_reference_size_c + 1];
char orig_name[IMF_filename_size_c + 1];
char path_name[SS_MAXPATHLEN];
char relative_path[IMF_relative_path_size_c+1];
FILE *out_file_fp = NULL; /* Output file pointer */
FILE *out_Datasefile_fp = NULL; /* Output file pointer */
tag_t *item_tags = NULLTAG;
tag_t *secondary_objects = NULLTAG;
tag_t titem_rev = NULLTAG;
tag_t objTypeTag = NULLTAG;
tag_t refobject = NULLTAG;
tag_t towning_user = NULLTAG;
tag_t tlast_mod_user = NULLTAG;
AE_reference_type_t reftype;
(void)argc;
(void)argv;
int secondaryobjectcount = 0;
int referencenumberfound = 0;
int statuscount = 0;
int istatus = ITK_ok;
int n_item = 0;
int iFail = ITK_ok;
int retcode = ITK_ok;
auto t = std::time(nullptr);
auto tm = *std::localtime(&t);
/* Display help if user asked for it */
/*if ( ITK_ask_cli_argument("-h") )
{
display_help();
return EXIT_FAILURE;
}
*/
//validating the arguments names specified through command line
//If any of the argumnent name is invalid then user can not proceed
/*if ( validate_arguments_name( argc , argv ) == false)
{
display_help();
return EXIT_FAILURE;
}
*/
std::cout << "\nStart Time :"<<std::put_time(&tm, "%d-%m-%Y %H:%M:%S") << std::endl;
userId = ITK_ask_cli_argument( "-u" );
password = ITK_ask_cli_argument( "-p" );
group = ITK_ask_cli_argument( "-g" );//dba
userId++;password++;group++;//return argument was containing '=' so pointer incremented
if( (!userId) || (!password) ||(!group) )
{
printf("\n\n\t\t Enter -u=? -p=? -g=?");
exit(0);
}
out_file_fp = fopen ( out_file_name , "w" );
out_Datasefile_fp = fopen ( out_Datasetfile_name , "w" );
if ( out_file_fp == NULL || out_Datasefile_fp == NULL )
{
fprintf(stdout , "Could not open the output file. \n");
return EXIT_FAILURE;
}
/*Initializing the text services */
ITK_initialize_text_services( 0 );
istatus = ITK_init_module( userId , password , group );
//istatus = ITK_init_module("infodba","infodba","dba");
if ( istatus != ITK_ok)
{
EMH_ask_error_text( istatus, &errormsg);
printf("Error with ITK_init_module: %s \n",errormsg);
MEM_free(errormsg);
return istatus;
}
istatus = Get_Items(&n_item, &item_tags);
//cout<<"login status "<<iFail<<endl;
if ( istatus == ITK_ok )
{
//cout<<"\n Login successful...."<<endl;
if ( n_item > 0 )
{
for ( int i = 0; i < n_item; i++ )
{
if (AOM_ask_value_string(item_tags[i],"object_name",&objectname)!= ITK_ok )PrintErrorStack();
//cout<<"object name is "<<objectname<<endl;
ITEM_ask_latest_rev( item_tags[i],&titem_rev );
if (AOM_ask_value_string(titem_rev,"item_revision_id",&revisionid)!= ITK_ok )PrintErrorStack();
//cout<<"Revision id is "<<revisionid<<endl;
if (AOM_ask_value_string(titem_rev,"object_desc",&object_desc)!= ITK_ok )PrintErrorStack();
//cout<<"object_desc is "<<object_desc<<endl;
if (AOM_ask_value_date(titem_rev,"creation_date",&creation_date)!= ITK_ok )PrintErrorStack();
date_format = (char *) TC_text ("DefaultDateFormat");
DATE_date_to_string ( creation_date , date_format , &creationdate_string);
//cout<<"creation_date is "<<creationdate_string<<endl;
if (AOM_ask_owner(titem_rev,&towning_user)!= ITK_ok )PrintErrorStack();
AOM_ask_value_string(towning_user,"user_id",&owning_user);
//cout<<"owning_user is "<<owning_user<<endl;
if (AOM_UIF_ask_value(titem_rev,"project_ids",&project_ids)!= ITK_ok )PrintErrorStack();
//cout<<"project_ids is "<<project_ids<<endl;
if (AOM_ask_value_date(titem_rev,"last_mod_date",&last_mod_date)!= ITK_ok )PrintErrorStack();
DATE_date_to_string ( last_mod_date , date_format , &lastmoddate_string);
//cout<<"last_mod_date is "<<lastmoddate_string<<endl;
if ( AOM_ask_last_modifier(titem_rev,&tlast_mod_user)!= ITK_ok )PrintErrorStack();
AOM_ask_value_string(tlast_mod_user,"user_id",&last_mod_user);
///cout<<"last_mod_user is "<<last_mod_user<<endl;
AOM_UIF_ask_value(titem_rev,"last_release_status",&release_status_list);
//cout<<"release_status_list is "<<release_status_list<<endl;
fprintf (out_file_fp , "%s,%s,%s,%s,%s,%s,%s,%s,%s\n" , objectname,object_desc,revisionid,creationdate_string,owning_user,project_ids,lastmoddate_string,last_mod_user,release_status_list );
GRM_list_secondary_objects_only (titem_rev,NULLTAG,&secondaryobjectcount,&secondary_objects);
//cout<<"Dataset count is "<<secondaryobjectcount<<endl;
for(int datasetcount=0;datasetcount<secondaryobjectcount;datasetcount++)
{
if (TCTYPE_ask_object_type(secondary_objects[datasetcount],&objTypeTag)!=ITK_ok)PrintErrorStack();
if (TCTYPE_ask_name(objTypeTag,type_name)!=ITK_ok)PrintErrorStack();
//cout<<"type_name is "<<type_name<<endl;
if( (strcmp(type_name,"UGMASTER") == 0)|| (strcmp(type_name,"MSExcelX") ==0 ) || (strcmp(type_name,"DirectModel") == 0 ) )
{
if (AE_ask_dataset_ref_count(secondary_objects[datasetcount],&referencenumberfound)!=ITK_ok)PrintErrorStack();
if ( referencenumberfound > 0 )
{
AOM_ask_name (secondary_objects[datasetcount],&datasetname);
fprintf (out_Datasefile_fp , "%s,%s,%s,", objectname,revisionid,datasetname);
for ( int j=0;j<referencenumberfound;j++ )
{
strcpy(orig_name,"");
strcpy(path_name,"");
strcpy(relative_path,"");
if (AE_find_dataset_named_ref(secondary_objects[datasetcount],j,refname,&reftype,&refobject)!=ITK_ok)PrintErrorStack();
//cout<<"reftype ="<<reftype<<endl;
//cout<<"refname ="<<refname<<endl;
if(strcmp(refname,"UGPART-ATTR")!=0)
{
if ( IMF_ask_original_file_name(refobject,orig_name)!=ITK_ok)PrintErrorStack();
// cout<<"\n orig_name is :%s\n"<<orig_name<<endl;
if(IMF_ask_file_pathname(refobject,SS_WNT_MACHINE,path_name)!=ITK_ok)PrintErrorStack();
// cout<<"\n path_name is :%s\n"<<path_name<<endl;
fprintf (out_Datasefile_fp , "%s,%s\n" , orig_name,path_name );
}
}
}
}
}
}
}
}
/*
MEM_free(objectname);
MEM_free(revisionid);
MEM_free(userId);
MEM_free(password);
MEM_free(group);
*/
if ( ( out_file_fp != NULL ) && ( out_file_fp != stdout ) )
{
fclose ( out_file_fp );
}
if ( ( out_Datasefile_fp != NULL ) && ( out_Datasefile_fp != stdout ) )
{
fclose ( out_Datasefile_fp );
}
tm = *std::localtime(&t);
std::cout << "End Time: "<<std::put_time(&tm, "%d-%m-%Y %H:%M:%S") << std::endl;
cout<<"output file will be available at exe location with name Itemdetails.csv and DatasetDetails.csv"<<endl;
/* Cleanup */
MEM_free(item_revision_id);
MEM_free(object_desc);
MEM_free(owning_user);
MEM_free(project_ids);
MEM_free(last_mod_user);
MEM_free(release_status_list);
MEM_free(date_format);
MEM_free(lastmoddate_string);
MEM_free(creationdate_string);
MEM_free (secondary_objects );
MEM_free ( item_tags );
retcode = ITK_exit_module(true);
return EXIT_SUCCESS;
}
int Get_Items (int *nFound, tag_t** foundTags)
{
/* Add select attributes. We want the uids of the workspace
objects so we can load them: */
const char *select_attrs[] = {"puid"};
const char *name[] = {"Item"};
char *enqid = "find_wso_by_type";
char *value_prop = NULL;
char *object_type = NULL;
int i;
int n_rows, n_cols;
void ***values;
if (POM_enquiry_create (enqid)!= ITK_ok )PrintErrorStack();
if (POM_enquiry_add_select_attrs (enqid,"Item", 1,select_attrs)!= ITK_ok )PrintErrorStack();
/* Add any attribute expressions. We need two of them – one
for the value we are given and another for the attribute we are
testing against: */
//CHECK_FAIL(POM_enquiry_set_string_value (enqid, "test",1,name, POM_enquiry_bind_value ));
//CHECK_FAIL(POM_enquiry_set_attr_expr (enqid, "expr1","workspaceobject", "object_type",POM_enquiry_equal, "test" ));
/* Set the where condition so we only get back matching rows: */
//CHECK_FAIL(POM_enquiry_set_where_expr (enqid, "expr1"));
/* Now execute the query: */
if ( POM_enquiry_execute (enqid, &n_rows, &n_cols,&values)!= ITK_ok ) PrintErrorStack();
cout<<"Number of Item object found : "<<n_rows<<endl;
if ( n_rows != 0 )
{
*foundTags = (tag_t *)MEM_alloc ( n_rows * sizeof( tag_t ));
*nFound = n_rows;
for ( i =0 ; i < (*nFound) ; i++ )
{
(*foundTags )[i] = *((tag_t *)values[i][0]);
//if (AOM_ask_value_string((*foundTags )[i],"object_name",&value_prop)!= ITK_ok )PrintErrorStack();
//cout<<"object name is "<<value_prop<<endl;
//if (WSOM_ask_object_type2((*foundTags )[i],&object_type)!= ITK_ok )PrintErrorStack();
// cout<<"object type is "<<object_type<<endl;
}
}
if ( POM_enquiry_delete("find_wso_by_type")!= ITK_ok ) PrintErrorStack();
MEM_free( values );
return 0;
}
Explanation : Important API POM_enquiry_create (enqid)
POM_enquiry_add_select_attrs (enqid,"Item", 1,select_attrs)
POM_enquiry_execute (enqid, &n_rows, &n_cols,&values)