企業短信服務器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<SignOffcount;i++)
		{
			CALL(EPM_ask_signoff_member(SignOffs[i],&member,&type));
			if(SIGNOFF_GROUPMEMBER == type)
			{
				CALL(SA_ask_groupmember_user(member,&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, "parent_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);
			}
		}
		SAFE_SM_FREE(SignOffs);
	}
	printf("\n");

	/***********SMS*****************/
	return ifail;
}

3. 在TC中配置該ACTION HANDLER

do節點

審覈節點


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章