/** * @addtogroup workflow * @{ */ /** * @file epm_register_handler.cpp * @brief itk user exits function implemention * @date 2009/2/13 * @author James Pang * @history * =================================================================================== * Date Name Description * 13-Feb-2009 James created */ #pragma warning (disable: 4996) #pragma warning (disable: 4819) /** * @headerfile tcua 头文件 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /** * @headerfile cpp 头文件 */ //#include "stdafx.h" #include #include #pragma comment( lib, "shell32.lib") #include #include #include #include #include using namespace std; //#include "register_handler_methods.h" #include "error_handling.h" #include "string_helper.h" #include "common_itk_util.h" #include "mdbks_register.h" int Origin_process_msexcel(tag_t dataset, char *dat_file); int Origin_process_msword(tag_t dataset, char *dat_file); int Origin_process_ugmaster( tag_t dataset, char *dat_file); int Origin_process_autocad( tag_t dataset, char *dat_file); int Origin_process_proe(tag_t dataset, char *dat_file); //int Origin_create_temp_file(char *file_content, char *file_name); int Origin_create_temp_file(char *file_content, char *item_id, char *file_name); int Origin_process_acad(tag_t dataset, char *dat_file); #define random(x) (rand()%x) static int create_rand_number(int *randnum) { srand( (unsigned)time( NULL ) ); //double d; //d = random(1000)/7*10000000; //sprintf (yourID, size, "0x80x8", time (0), rand()); *randnum=random(1000000)+(long)GetTickCount(); //*randnum=int(d); return 0; } int Sample2( tag_t cur_task, char *specified_task_node, tag_t *found_task ) { tag_t job, root_task, root_template; EPM_ask_job( cur_task, &job ); EPM_ask_root_task( job, &root_task ); int sub_task_num = 0; tag_t *sub_tasks = NULL, the_task = NULLTAG; EPM_ask_sub_tasks( root_task, &sub_task_num, &sub_tasks ); for ( int i=0; i0 ); if ( !is_valid_node ) *found_task = NULLTAG; return ITK_ok; } int ORIGIN_EPM_check_and_signoff( EPM_action_message_t msg ) { tag_t specified_task = NULLTAG; printf( "in ORIGIN_EPM_check_and_signoff\n" ); char *cur_task_name = NULL; ITKCALL( EPM_ask_name2( msg.task, &cur_task_name ) ); if ( stricmp( cur_task_name, "perform-signoffs" ) == 0 ) { ITKCALL( EPM_ask_parent_task( msg.task, &specified_task ) ); } else specified_task = msg.task; char* task_type = NULL; ITKCALL( WSOM_ask_object_type2( specified_task, &task_type ) ); if ( stricmp( task_type, "EPMReviewTask" ) != 0 ) { return ITK_ok; } //取意见或者做别的事情 return ITK_ok; } static int CheckTaskValid(EPM_action_message_t msg, logical *is_demote ) { tag_t cur_task = NULLTAG; char* task_type = NULL; ITKCALL( WSOM_ask_object_type2( msg.task, &task_type ) ); if ( stricmp( task_type, "EPMPerformSignoffTask" ) != 0 ) { printf(("current task type is not EPMPerformSignoffTask\n" )); return HANDLER_PLACED_INVALID; } } int ORIGIN_ask_task_node(tag_t cur_task, char *task_node_name, tag_t *task_node) { tag_t job, root_task; char buf[BUFSIZ] = ""; ITKCALL(EPM_ask_job(cur_task, &job)); ITKCALL(EPM_ask_root_task(job, &root_task)); int sub_task_num = 0; tag_t *sub_tasks = NULL, the_task = NULLTAG; ITKCALL(EPM_ask_sub_tasks(root_task, &sub_task_num, &sub_tasks)); for (int i = 0; i < sub_task_num; i++) { char* task_name = NULL; ITKCALL(EPM_ask_name2(sub_tasks[i], &task_name)); if (stricmp(task_name, task_node_name) == 0) { the_task = sub_tasks[i]; break; } } MEM_free( sub_tasks ); if (the_task == NULLTAG) { sprintf( buf, "no specified task\n" ); printf( (buf) ); return WORKFLOW_NODE_IS_NOT_VALID; } char* cur_task_name = NULL; ITKCALL(EPM_ask_name2(cur_task, &cur_task_name)); printf( "cur task = %s\n", cur_task_name ); logical is_valid_node = FALSE; int num_success = 0; tag_t *successors = NULL; ITKCALL(AOM_ask_value_tags(the_task, "successors", &num_success, &successors)); if(num_success != 0) { do { tag_t one_successor = successors[0]; MEM_free(successors); char* successor_name = NULL; ITKCALL(EPM_ask_name2(one_successor, &successor_name)); if (strcmp(successor_name, cur_task_name) == 0) { is_valid_node = TRUE; *task_node = the_task; break; } ITKCALL(AOM_ask_value_tags(one_successor, "successors", &num_success, &successors)); } while (num_success > 0); } if (!is_valid_node) { *task_node = NULLTAG; } return ITK_ok; } int ORIGIN_ask_sign_info(tag_t task_node, char *output_str,char *task_name) { //strcpy(output_str, ""); tag_t cur_perform_task = NULLTAG, tempTask = NULLTAG; char* cur_task_name = NULL, buf[BUFSIZ] = ""; ITKCALL( EPM_ask_name2( task_node, &cur_task_name ) ); printf("cur_task_name = %s\n",cur_task_name); if ( stricmp( cur_task_name, "perform-signoffs" ) == 0 ) { cur_perform_task = task_node; ITKCALL( EPM_ask_parent_task( cur_perform_task, &tempTask ) ); ITKCALL( EPM_ask_name2( tempTask, &cur_task_name ) ); } else if( strcmp( cur_task_name, "编制" ) == 0 ) { cur_perform_task = task_node; } else { ITKCALL( EPM_ask_sub_task(task_node, "perform-signoffs", &cur_perform_task) ); if ( cur_perform_task != NULLTAG ) { ITKCALL( EPM_ask_name2( task_node, &cur_task_name ) ); } } //cur_perform_task = task_node; //printf("output_str=%s\n",output_str); if(cur_perform_task != NULLTAG ) { //printf("output_str=%s\n",output_str); //if( strcmp( cur_task_name, "编制" ) == 0 ) //{ // printf("编制!================\n"); // //printf("output_str=%s\n",output_str); // // printf("task_name=%s\n",task_name); // int s; // EPM_decision_t decision = EPM_nogo; // char* userName; // tag_t aUserTag, responsibleParty; // s = EPM_ask_responsible_party(cur_perform_task, &responsibleParty); // if (responsibleParty!= NULLTAG) // { // decision = EPM_go; // } // // s = POM_get_user (&userName, &aUserTag); // date_t decision_date; // char person_name[SA_name_size_c + 1] = ""; // //if( strstr(output_str,"编制")==NULL ) // { // ITKCALL(SA_ask_user_person_name(aUserTag, person_name)); // strcat(output_str, "|"); // strcat(output_str, cur_task_name); // strcat(output_str, "="); // strcat(output_str, person_name); // strcat(output_str, "|"); // strcat(output_str, cur_task_name); // strcat(output_str, "日期="); // char* prop_name="last_mod_date";//或date_released // // ITKCALL(AOM_ask_value_date(cur_perform_task,prop_name,&decision_date)); // char date_buf[20] = ""; // sprintf( date_buf, "%4d-%02d-%02d", decision_date.year, decision_date.month+1, decision_date.day ); // strcat( output_str, date_buf ); // printf(output_str); // printf("\n"); // } // // MEM_free (userName); // //} //else { int perform_count = 0; int *attach_type; tag_t *perform_attaches = NULL; //ITKCALL(EPM_ask_attachments(cur_perform_task, EPM_signoff_attachment, &perform_count, &perform_attaches)); ITKCALL(EPM_ask_all_attachments(cur_perform_task,&perform_count,&perform_attaches,&attach_type)); sprintf( buf, "EPM_signoff_attachment Counts = %d\n", perform_count); if(perform_count ==0) { //ITKCALL(EPM_ask_attachments(cur_perform_task, EPM_target_attachment, &perform_count, &perform_attaches)); sprintf( buf, "perform_count = %d\n", perform_count); printf(buf); //printf( (buf) ); } for(int i = 0; i < perform_count; i++) { //printf("attach_type = %d\n", attach_type[i]); tag_t memberTag = NULLTAG; SIGNOFF_TYPE_t memberType; //CR_signoff_decision_t signoff_decision; EPM_signoff_decision_t signoff_decision; char* comments = NULL; date_t decision_date; char* person_name = NULL; ITKCALL(EPM_ask_signoff_member(perform_attaches[i], &memberTag, &memberType)); //ITKCALL(CR_ask_signoff_decision(perform_attaches[i], &signoff_decision, comments, &decision_date)); ITKCALL(EPM_ask_signoff_decision(perform_attaches[i], &signoff_decision, &comments, &decision_date)); if(memberType == SIGNOFF_GROUPMEMBER )//&& strstr(cur_task_name,"编制")==NULL) { printf("\ncur_task_name = %s\n",cur_task_name); tag_t user_tag = NULLTAG, group_tag = NULLTAG, role_tag = NULLTAG; ITKCALL(SA_ask_groupmember_user(memberTag, &user_tag)); ITKCALL(SA_ask_user_person_name2(user_tag, &person_name)); strcat(output_str, "|"); strcat(output_str, cur_task_name); strcat(output_str, "="); strcat(output_str, person_name); strcat(output_str, "|"); strcat(output_str, cur_task_name); strcat(output_str, "日期="); char date_buf[20] = ""; sprintf( date_buf, "%4d-%02d-%02d", decision_date.year, decision_date.month+1, decision_date.day ); strcat( output_str, date_buf ); } } } } return ITK_ok; } int ORIGIN_EPM_auto_signoff(EPM_action_message_t msg) { char *arg = 0; char *name = NULL, *value = NULL, buf[BUFSIZ] = ""; logical hasDemoteNode = FALSE; char* task_name = NULL; char sign_info[1024] = ""; char* root_task_name = NULL; tag_t current_task = msg.task; int sub_task_count = 0; tag_t root_task = NULLTAG, *sub_tasks = NULL; ITKCALL( EPM_ask_root_task( msg.task, &root_task ) ); ITKCALL( EPM_ask_sub_tasks( root_task, &sub_task_count, &sub_tasks) ); ITKCALL( EPM_ask_name2( root_task, &root_task_name ) ); printf("root_task_name=%s\n",root_task_name); ITKCALL( EPM_ask_name2( current_task, &task_name ) ); printf( "sub_task_count = %d\n", sub_task_count ); if(strcmp(task_name,"编制")==0) { printf("task_name=%s\n",task_name); int s; EPM_decision_t decision = EPM_nogo; tag_t aUserTag, responsibleParty; s = EPM_ask_responsible_party(current_task, &responsibleParty); if (responsibleParty!= NULLTAG) { decision = EPM_go; } char* userName; s = POM_get_user (&userName, &aUserTag); date_t decision_date; char* person_name = NULL; ITKCALL(SA_ask_user_person_name2(aUserTag, &person_name)); strcat(sign_info, "|"); strcat(sign_info, task_name); strcat(sign_info, "="); strcat(sign_info, person_name); strcat(sign_info, "|"); strcat(sign_info, task_name); strcat(sign_info, "日期="); char* prop_name="last_mod_date";//或date_released ITKCALL(AOM_ask_value_date(current_task,prop_name,&decision_date)); char date_buf[20] = ""; sprintf( date_buf, "%4d-%02d-%02d", decision_date.year, decision_date.month+1, decision_date.day ); strcat( sign_info, date_buf ); printf(sign_info); printf("\n"); MEM_free (userName); } else { for ( int i=0; itm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec); // } // else // { // sprintf_s(local_path, "%s\\%d-%d-%d-%d-%d-%d.dat", temp_dir, // 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec); // } // // if((filePtr = fopen(local_path, "wt")) == NULL) // { // printf("Can not create the temp dat file!\n"); // return -1; // } // // strcpy(file_name, local_path); // // fwrite(file_content, sizeof(char), strlen(file_content), filePtr); // fclose(filePtr); // // return ITK_ok; //} int Origin_create_temp_file(char *file_content,char *item_id, char *file_name) { time_t now; struct tm *p; FILE *filePtr = NULL; char *temp_dir = getenv("TEMP"); char local_path[MAX_PATH] = ""; time(&now); p = localtime(&now); if(temp_dir[strlen(temp_dir) - 1] == '\\') { sprintf_s(local_path, "%s%s%d-%d-%d-%d-%d-%d.dat", temp_dir,item_id, 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec); } else { sprintf_s(local_path, "%s\\%s%d-%d-%d-%d-%d-%d.dat", temp_dir,item_id, 1900+p->tm_year,p->tm_mon+1 ,p->tm_mday+1 ,p->tm_hour,p->tm_min ,p->tm_sec); } if((filePtr = fopen(local_path, "wt")) == NULL) { printf("Can not create the temp dat file!\n"); return -1; } strcpy(file_name, local_path); fwrite(file_content, sizeof(char), strlen(file_content), filePtr); fclose(filePtr); return ITK_ok; } void TC2C(const PTCHAR tc, char * c) { #if defined(UNICODE) WideCharToMultiByte(CP_ACP, 0, tc, -1, c, wcslen(tc), 0, 0); c[wcslen(tc)] = 0; #else lstrcpy((PTSTR)c, (PTSTR)tc); #endif } int ORIGIN_EPM_signoff_itemid(EPM_action_message_t msg) { char *arg = 0; char *name = NULL, *value = NULL, buf[BUFSIZ] = ""; logical hasDemoteNode = FALSE; char* task_name = NULL; char sign_info[1024] = ""; char* root_task_name = NULL; tag_t current_task = msg.task; //============================================================ map item_types_map; map::iterator item_types_map_iter = item_types_map.begin(); logical is_debug = FALSE; char value_name[128]=""; char fixed_prop[WSO_name_size_c + 1]=""; char *flag = NULL; int sub_task_count = 0; POM_AM__set_application_bypass(TRUE); int num_of_arguments = TC_number_of_arguments( msg.arguments ); for (int i=0; i ans; Split( value, ',', ans ); for (size_t j=0; j