/*=================================================================================================== Copyright(c) 2011 Siemens PLM Software Corp. All rights reserved. Unpublished - All rights reserved ==================================================================================================== File description: Filename : epm_autosign_hander.cpp This file describes action handler function : PLA8-signoff 将流程签审信息写入表单 ==================================================================================================== Date Name Description of Change 19-Jan-2013 Ray Li creation $HISTORY$ ==================================================================================================*/ #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 #include #include #include #include #include #include #include /** * @headerfile standard c & cpp header files */ #include #include #include //#include //#include #include #include #include #include #include #include using namespace std; /** * @headerfile user's header files */ #include "epm_handler_common.h" #include "error_handling.h" #include "common_itk_util.h" //#include "string_helper.h" //流程节点信息 struct FLOWNODEINFOS { char taskname[128]; char username[128]; char timeinfo[128]; char group[128]; }flownode_s[64]; //参数人员信息 struct USERINFOS { char taskname[128]; char propertyname[128]; char group[128]; }userinfo_s[64]; //参数日期信息 struct TIMEINFOS { char taskname[128]; char propertyname[128]; char group[128]; }timeinfo_s[64]; ////会签信息 //struct SIGNCOUNTERINFO //{ // char taskname[128]; // char group[128]; // char propertyname[128]; //}counter_s[64]; int nodecount = 0; int userinfoscount = 0; int timeinfoscount = 0; //int counterinfocount = 0; #define DOFREE(obj) \ { \ if(obj) \ { \ MEM_free(obj); \ obj = NULL; \ } \ } //struct SIGN_INFO_STRUCT //{ // string userid; // string username; // string taskname; // string signdate; //}; //struct SIGN_PROPS_STRUCT //{ // string taskname; // string propname; //}; //struct SIGN_TIME_STRUCT //{ // string taskname; // string propname; //}; extern "C" int POM_AM__set_application_bypass(logical bypass); //void ECHO(char *format, ...) //{ // //if( !YFJC_OPT_DEBUG ) // // return; // // char msg[2048]; // va_list args; // // va_start( args, format ); // vsprintf( msg, format, args ); // va_end( args ); // // printf( msg ); // TC_write_syslog( msg ); //} //分割字符串 int ORIGIN_ask_sign_info(tag_t task_node, char *output_str,char *task_name,char *arg3value) { int ifail = ITK_ok; tag_t cur_perform_task = NULLTAG,tempTask = NULLTAG; char cur_task_name[WSO_name_size_c+1]="",buf[128] = ""; //编制判断变量 int s = 0; EPM_decision_t decision = EPM_nogo; char* userName; char *timeinfo1 = "",person_name[SA_name_size_c+1]="",*prop_name = "last_mod_date"; tag_t aUserTag = NULLTAG,responsibleParty = NULLTAG; date_t decision_date; //其他节点相关 int perform_count = 0; int *attach_type; tag_t *perform_attaches = NULLTAG; tag_t memberTag = NULLTAG; SIGNOFF_TYPE_t memberType; CR_signoff_decision_t signoff_decision; char comments[CR_comment_size_c+1],*timeinfo="",*group_full_name = NULL; tag_t user_tag=NULLTAG, group_tag = NULLTAG; //循环判断变量 int i=0; ITKCALL( EPM_ask_name( task_node, cur_task_name ) ); ECHO("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_name( 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_name( task_node, cur_task_name ) ); ECHO( "---------> cur_task_name = %s\n" , cur_task_name ); } } if(cur_perform_task != NULLTAG ) { if( strcmp( cur_task_name, "编制" ) == 0 ) { //ECHO("task_name=%s",task_name); //s = EPM_ask_responsible_party(cur_perform_task,&responsibleParty); //if(responsibleParty != NULLTAG) //{ // decision = EPM_go; //} //s = POM_get_user(&userName,&aUserTag); //ITKCALL(SA_ask_user_person_name(aUserTag, person_name)); //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, "日期="); //ITKCALL(AOM_ask_value_date(cur_perform_task,prop_name,&decision_date)); //ITKCALL(DATE_date_to_string(decision_date,arg3value,&timeinfo1)); ////ECHO("timeinfo : %s",timeinfo1); ////ITK_date_to_string (decision_date, &timeinfo1); //strcat( output_str, timeinfo1 ); //strcat(output_str,"|"); //ECHO("timeinfo : %s",timeinfo1); //strcpy(flownode_s[nodecount].taskname,cur_task_name); //strcpy(flownode_s[nodecount].username,person_name); //strcpy(flownode_s[nodecount].timeinfo,timeinfo1); //nodecount = nodecount + 1; //MEM_free(userName); } else { //发起人即所有者 tag_t owner = NULLTAG; date_t date; logical is_valid; char *d_value = NULL; CALL(AOM_ask_owner( cur_perform_task, &owner)); if( owner != NULLTAG ) CALL(SA_ask_user_person_name(owner, person_name)); ITKCALL(AOM_ask_value_date(cur_perform_task,"creation_date", &date));//fnd0StartDate DATE_date_to_string(date,arg3value,&d_value); //ITKCALL(AOM_UIF_ask_value( cur_perform_task, "fnd0StartDate", &d_value)); ECHO("d_value : %s",d_value); strcat(output_str, "申请人"); strcat(output_str, "="); strcat(output_str, person_name); strcat(output_str, "|"); strcat(output_str, "申请人日期="); //CALL(DATE_date_to_string(date,arg3value,&timeinfo)); //ITKCALL(DATE_string_to_date_t(d_value, &is_valid,&date)); //CALL(DATE_date_to_string(date,arg3value,&timeinfo)); //ECHO("timeinfo : %s",timeinfo); //vector ans; //if( d_value != NULL ) //{ // Split(d_value, ' ', ans); // if(ans.size() > 1) // strcat(output_str,ans[0].c_str()); //} strcat(output_str,d_value); //DOFREE(timeinfo); strcat(output_str, "|"); strcpy(flownode_s[nodecount].taskname,"申请人"); strcpy(flownode_s[nodecount].username,person_name); //if(ans.size() > 1) strcpy(flownode_s[nodecount].timeinfo,d_value); nodecount = nodecount + 1; ECHO("output_str=%s",output_str); ITKCALL(EPM_ask_all_attachments(cur_perform_task,&perform_count,&perform_attaches,&attach_type)); ECHO("EPM_signoff_attachment Counts = %d", perform_count); for(i=0;i 0) { for (i=0;i type_vec; //Split(exclude_type,";",type_vec); ECHO("参数1个数:%d\n",userinfoscount); ECHO("参数2个数:%d\n",timeinfoscount); ITKCALL( EPM_ask_root_task( msg.task, &root_task ) ); ITKCALL( EPM_ask_sub_tasks( root_task, &sub_task_count, &sub_tasks) ); ITKCALL( EPM_ask_name( root_task, root_task_name ) ); ECHO("root_task_name=%s\n",root_task_name); ITKCALL( EPM_ask_name( current_task, task_name ) ); ECHO( "sub_task_count = %d\n", sub_task_count ); //test========================== //tag_t user = NULLTAG, *tasks = NULL; //int n_task= 0; //ITKCALL(SA_find_user( "admin", &user )); //ITKCALL(SA_ask_user_work_contexts ( user, &n_task, &tasks)); //ECHO("==========n_task=%d",n_task); //============================== //单独处理DO节点 if(strcmp(task_name,"编制") == 0) { ECHO("task_name:%s",task_name); s = EPM_ask_responsible_party(current_task,&responsibleParty); if(responsibleParty != NULLTAG) { decision = EPM_go; } s = POM_get_user(&userName,&aUserTag); ITKCALL(SA_ask_user_person_name(aUserTag,person_name)); strcat(sign_info,task_name); strcat(sign_info,"="); strcat(sign_info,person_name); strcat(sign_info,"|"); strcat(sign_info,task_name); strcat(sign_info,"日期="); AOM_ask_value_date(current_task,prop_name,&decision_date); //AOM_UIF_ask_value(current_task,prop_name, &timeinfo2); DATE_date_to_string(decision_date,arg3value,&timeinfo2); ECHO("timeinfo2=%s",timeinfo2); strcat(sign_info,timeinfo2); strcat(sign_info,"|"); strcpy(flownode_s[nodecount].taskname,task_name); strcpy(flownode_s[nodecount].username,person_name); strcpy(flownode_s[nodecount].timeinfo,timeinfo2); nodecount = nodecount + 1; } else //perform节点 { for(i=0;i