您的位置:首页 > 其它

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

2012-12-17 09:58 387 查看
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节点



审核节点

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: