企业短信服务器4.1&ITK实现TC流程节点前提示

TC流程到各个节点的时候,需要对节点的相关人员发送短信进行通知。

在此之前,尝试过直接调用dll文件实现发送短信,但是有个问题就是短信猫每小时最多大约发送600条短信。发送密集时,会出现“丢”短信的问题。

最后使用企业短信服务器来实现自动队列和发送短信息。ITK部分只需要告诉短信服务器要发送给谁,发送什么内容即可。

1. 调用服务器发送短信使用cmd。

格式为SendSMS 1891156xxxx 短信内容

void send_sms(const char* nameStr,		// 接受者名字
			  const char* numStr,		// 接受者手机号
			  const char* process_name, // 流程的名称
			  const char* parent_name	// 节点的名称
			  )
{
	CString m_msgStr;
	m_msgStr.Format("SendSms %s %s,您好!流程:[%s_%s]需要您处理!【PLM】", 
		numStr, nameStr, process_name, parent_name);
	// 发送信息给控制台
	WinExec(m_msgStr, SW_HIDE);
}


2. 流程节点的ACTION

/*********************************************************************************
【功    能】:	发送短信给任务想过人员
【异    常】:
【设    计】:	max
【注意事项】:	
【建立时间】:	2012年12月建立
【额外说明】:	
*********************************************************************************/
int	C3_JC_Send_SMS(EPM_action_message_t msg)
{
	int		ifail = ITK_ok;
	char	*err_string;
	int		err_line = -1;

	tag_t	job_tag = NULLTAG;
	tag_t   task_tag = NULLTAG;
	tag_t   root_task = NULLTAG;

	tag_t*	SignOffs = NULLTAG;
	int		SignOffcount=0;

	int		i;
	tag_t	member = NULLTAG;
	tag_t	user = NULLTAG;
	date_t	dicdate;
	SIGNOFF_TYPE_t	type;
	char	nameStr[SA_person_name_size_c+1]={'\0'};
	char*   numStr = NULL;
	tag_t	person_tag=NULLTAG;
	char*	process_name = NULL;
	char*	task_name = NULL;

	/*********************begin防止进入循环陷阱*******************/    
	task_tag = msg.task;
    if( task_tag==NULL_TAG )
        return ITK_ok;
    if ( msg.action > EPM_perform_action )
    {
        return ITK_ok;
    }
	/*********************end防止进入循环陷阱*******************/  

	/***********获取流程目标对象*****************/
	CALL(EPM_ask_job( msg.task, &job_tag ));
	CALL(EPM_ask_root_task(job_tag,&root_task));

	/***************获取签审成员***************/
	CALL(EPM_ask_attachments(task_tag,EPM_signoff_attachment,&SignOffcount,&SignOffs));
	if (0 == SignOffcount){
		/***************不存在签审成员则找责任人***************/
		CALL(EPM_ask_responsible_party(task_tag,&user));
		CALL(SA_ask_user_person(user,&person_tag));
		CALL(SA_ask_person_name(person_tag,nameStr));
		CALL(SA_ask_person_attr(person_tag,"PA10",&numStr));
		if((NULL != numStr)&&(tc_strcmp(numStr, "")))
		{
			CALL(AOM_ask_value_string(task_tag, "job_name", &process_name));
			CALL(AOM_ask_value_string(task_tag, "object_name", &task_name));
			// 发送短信
			send_sms(nameStr, numStr, process_name, task_name);
			MEM_free_s(process_name);
			MEM_free_s(task_name);
			MEM_free_s(numStr);
		}else
			printf("\n%s的%s手机号码为空", nameStr, numStr);
	}else{
		/*遍历签审成员*/
		for(i=0;i

3. 在TC中配置该ACTION HANDLER

do节点

审核节点


你可能感兴趣的:(ITK)