#define _CRT_SECURE_NO_WARNINGS #include "epm_handler_common.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") using namespace std; #define DOFREE(obj) \ { \ if(obj) \ { \ MEM_free(obj); \ obj = NULL; \ } \ } int Send_Order_Process(void *returnValue){ printf("==================订单评审流程 START =======================\n"); //获取传递过来的参数 tag_t process = NULLTAG, tmp_select_signoff_task = NULLTAG, template_tag = NULLTAG; int cnt_task = 0, signoff_cnt = 0; tag_t * tasks = NULLTAG, * signoffs = NULLTAG; char * processUser = NULL, * arctic = NULL; char tmp_sub_task_name[WSO_name_size_c+1] = {'\0'}; ITKCALL(USERARG_get_tag_argument(&process)); //ITKCALL(USERARG_get_tag_argument(&itemRevision)); //ITKCALL(USERARG_get_string_argument(&processTemplate)); ITKCALL(USERARG_get_string_argument(&processUser)); //车型 ITKCALL(USERARG_get_string_argument(&arctic)); ////发起流程 ////查找模板EPM_find_template,模板名称,模板类型,返回流程模板 //ITKCALL( EPM_find_template( processTemplate, PROCESS_TEMPLATE, &template_tag) ); //printf("获取流程模板成功!================\n"); //获取首选项的值 //printf("==================获取首选项的值 =======================\n"); //PREF_ask_char_values(processUser, &valueNum, &values);//获得首选项 //EPM_ask_tasks参数:流程,任务状态,返回:任务数,任务,已开始的任务 ITKCALL( EPM_ask_tasks(process,EPM_started, &cnt_task, &tasks )); //EPM_assign_responsible_party将责任方分配给给定的任务。责任方可以是用户,也可以是资源池,参数:任务,责任人 printf("流程任务数:%d+++++++++++++++++++++++++++\n",cnt_task); for( int k = 0; k < cnt_task; k++ ) { //流程节点的名称 ITKCALL( EPM_ask_name( tasks[k] , tmp_sub_task_name )); printf("流程节点名称:%s+++++++++++++++++++++++++++\n",tmp_sub_task_name); ////流程节点的类型 /*ITKCALL( AOM_ask_value_string( tasks[k] , "object_type" , &sub_task_object_type )); printf("流程节点类型%s=====================\n",sub_task_object_type);*/ //if(strcmp(tmp_sub_task_name,nodeUsers[0]) == 0) //{ //根据任务名称获取任务 ITKCALL( EPM_ask_sub_task( tasks[k] , EPM_select_signoff_team_task , &tmp_select_signoff_task )); /*if(strstr(nodeUsers[1],",") != NULL) { char ** userIds = new char *[64]; int userIdNum = 0; split(nodeUsers[1], ",", userIds, &userIdNum); for (int l = 0; l < userIdNum; l++) { tag_t user = NULLTAG; ITKCALL( SA_find_user(userIds[l],&user)); ITKCALL( EPM_create_adhoc_signoff( tmp_select_signoff_task , user , &signoff_cnt , &signoffs ) ); } userIds = NULL; } else { tag_t user = NULLTAG; ITKCALL( SA_find_user(nodeUsers[1],&user)); ITKCALL( EPM_create_adhoc_signoff( tmp_select_signoff_task , user , &signoff_cnt , &signoffs ) ); }*/ tag_t user = NULLTAG; if(strcmp(tmp_sub_task_name,"评审") == 0){ ITKCALL( SA_find_user(processUser,&user)); ITKCALL( EPM_create_adhoc_signoff( tmp_select_signoff_task , user , &signoff_cnt , &signoffs ) ); ITKCALL( EPM_set_adhoc_signoff_selection_done( tmp_select_signoff_task , true ) ); ITKCALL(EPM_trigger_action(tmp_select_signoff_task,EPM_complete_action, "")); } DOFREE( signoffs ); //} } //DOFREE( values ); DOFREE( processUser ); DOFREE( arctic ); DOFREE( tasks ); printf("==================订单评审流程 END =======================\n"); return ITK_ok; } int JL_Auto_Order_Process(EPM_action_message_t msg){ //订单评审流程结束之后按钮‘发起bom搭建’才能够点击 int ifail = ITK_ok; tag_t rootTask = NULLTAG,*attachments; int attachments_num = 0; char *object_type = NULL; EPM_ask_root_task(msg.task, &rootTask); //获取任务目标对象 EPM_ask_attachments(rootTask, EPM_target_attachment, &attachments_num, &attachments); ::CoInitialize(NULL); //初始化OLE/COM库环境 HRESULT hr = NULL; _ConnectionPtr m_pConnection; // 数据库 _RecordsetPtr m_pRecordset; // 命令 _CommandPtr m_pCommand; // 记录 char* server_address; int valueNum=0; PREF_ask_char_value("TC11_SqlServer_Link_ITK", valueNum, &server_address); hr = m_pConnection.CreateInstance(_uuidof(Connection));//创建连接对象实例 if (SUCCEEDED(hr)) { m_pConnection->ConnectionString = (server_address); //m_pConnection->ConnectionString = ("Provider = SQLOLEDB.1; Persist Security Info = False; User ID =infodba; Password=infodba; Initial Catalog = TCTEST2; Data Source = 10.110.81.13"); //m_pConnection->ConnectionString = ("Provider = SQLOLEDB.1; Persist Security Info = False; User ID =lw; Password=lw590; Initial Catalog = HZPC; Data Source = 192.168.200.6"); //printf("\n==========================================================\n"); hr = m_pConnection->Open("", "", "", adConnectUnspecified);//打开数据库 if (FAILED(hr)) { printf("Open Failed!"); return 1; } else { for (int i = 0; i < attachments_num; i++) { char *uid_value; AOM_ask_value_string(attachments[i], "object_type", &object_type); printf("类型为:%s\n",object_type); if(strstr(object_type,"OrderRevision") == NULL || strstr(object_type,"Master") != NULL){ continue; } ITK__convert_tag_to_uid(attachments[i],&uid_value); printf("UID为:%s\n",uid_value); char* updateSql = (char*)calloc(1024, sizeof(char)); sprintf(updateSql,"update GD_CONTROLSTYPE_TABLE set ENABLED = 'true' where ORDER_TAGU = '%s'and CONTROL_NAME = 'btnbom_4'; update GD_CONTROLSTYPE_TABLE set BACKGROUND = 'GREEN' where ORDER_TAGU = '%s'and CONTROL_NAME = 'label_36'; ",uid_value,uid_value); printf("写入语句为:%s\n",updateSql); m_pConnection->Execute(_bstr_t(updateSql), 0, adCmdText); updateSql = NULL; DOFREE(uid_value); //if(strstr(release_value,"Gd6_D") !=NULL && strstr(revision,"D00") == NULL){ // //向焊装排产系统数据库表写入发布的零件号、件名、版本、发布日期、发布时间等信息 // //修改数据库 // printf("开始写入\n"); // //开始写入 // AOM_ask_value_string(attachments[i],"object_name",&item_name); // AOM_ask_value_string(attachments[i],"item_id",&item_id); // date_t date = NULLDATE; // char *date_string = NULL; // AOM_ask_value_date(attachments[i],"date_released",&date); // DATE_date_to_string(date,"%Y-%m-%d %H:%M",&date_string); // printf("创建时间为:%s\n",date_string); // //printf("%s\n",date.year); // //printf("%s\n",date.month); // //printf("%s\n",date.day); // //printf("%s\n",date.hour); // //printf("%s\n",date.minute); // //printf("%s\n",date.second); // char* insertSql = (char*)calloc(1024, sizeof(char)); // //sprintf(insertSql,"insert into AAA(PARTNO,PARTNAME,VerNO,REL_date) values('%s','%s','%s','%s')",item_id,item_name,revision,date_string); // sprintf(insertSql,"insert into PLM_GetPartVerNO(PARTNO,PARTNAME,VerNO,REL_date) values('%s','%s','%s','%s')",item_id,item_name,revision,date_string); // printf("写入语句为:%s\n",insertSql); // m_pConnection->Execute(_bstr_t(insertSql), 0, adCmdText); // insertSql = NULL; // DOFREE(release_name); // DOFREE(date_string); //} } } } else { printf("Create instance of connection failed!"); return 1; } DOFREE(server_address); DOFREE(object_type); return ifail; }