通达OA触发器--压缩保存工作流中的表单文件和所有附件到服务器的指定目录(2013adv,2015,2016)

<?
//qq:1027167227
include_once("inc/auth.inc.php");
include_once("inc/utility_file.php");
include_once("../../list/export_flow.php");
include_once("inc/header.inc.php");
include_once("inc/workflow/inc/common.inc.php");
include_once("inc/workflow/inc/workflow.inc.php");
include_once("inc/workflow/tform/twork_export.class.php");
$RUN_ID_STR="7857";
//echo $RUN_ID_STR."<br>";
//workflow/query/explot_zip.php
if($archive_data){
	$archive_time="_".$archive_data;	
	$use_databases = "td_oa_archive.";
}else{
	$archive_time =="";
	$use_databases = "";
}

$zip_name = sprintf(_($RUN_ID_STR."OA工作(%s).zip"), date("Y-m-d",time()));
$zip_file = get_tmp_filename("workflow", $zip_name);

$zip = new ZipArchive;
$res = $zip->open($zip_file, ZipArchive::CREATE|ZIPARCHIVE::OVERWRITE);
if($res !== TRUE)
{
   Message(_("提示"),_("创建文件错误,代码:").$res);
   exit;
}

if($RUN_ID_STR=="")
   $RUN_ID_STR=0;
elseif(substr($RUN_ID_STR,-1,1)==",")
   $RUN_ID_STR=substr($RUN_ID_STR,0,-1);

$tmp_file_array = array();
$tmp_file_array[] = $zip_file;
$query = "SELECT * from FLOW_RUN where RUN_ID IN ($RUN_ID_STR)";
//echo $query."<br>";
$cursor= exequery(TD::conn(),$query);
while($ROW=mysql_fetch_array($cursor))
{
    $zipfiles="";
    $role_str = "";
    $RUN_ID = $run_id     = $ROW["RUN_ID"];
    $flow_id    = $ROW["FLOW_ID"];
    $run_name   = trim($ROW["RUN_NAME"]);
    
    //判断查看权限
    $role_str = run_role($run_id, 0, $archive_time);
    
    //判断保密字段规则 0 - 无保密字段 1 - 根据步骤号获得保密字段 2 - 对所有步骤的保密字段都设定为保密字段
    $flag_hidden_type = 1;
    $table_flow_run_prcs = $use_databases."flow_run_prcs".$archive_time;
    
    if(find_id($role_str, 1) || find_id($role_str, 3) || find_id($role_str, 5) || find_id($role_str, 9) || find_id($role_str, 10) || find_id($role_str, 11))
    {
        //系统管理员、查询、管理、监控、点评、编辑权限人可以看所有字段
        $PRCS_ID = 0;
        $flag_hidden_type = 0;
    }
    else if(find_id($role_str, 2) || find_id($role_str, 4) || find_id($role_str, 6))
    {
        //主办、经办、原始委托人可以查看其办理的最后一步流程步骤的所有字段
        $query2 = "select prcs_id from ".$table_flow_run_prcs."
                  where ID = (
                  select MAX(ID) from ".$table_flow_run_prcs." where RUN_ID = '".$run_id."'
                  AND (USER_ID = '".$_SESSION["LOGIN_USER_ID"]."'
                  or FIND_IN_SET('".$_SESSION["LOGIN_USER_ID"]."',OTHER_USER))) ";
        $cursor2 = exequery(TD::conn(), $query2);
        if($row2 = mysql_fetch_array($cursor2))
        {
            $PRCS_ID = $row2['prcs_id'];
        }
        $flag_hidden_type = 1;
    }
    else if(find_id($role_str, 8) || find_id($role_str, 7))
    {
        //传阅人或者父、子流程权限所有人,所有步骤的保密字段
        $PRCS_ID = 0;
        $flag_hidden_type = 2;
    }
    
    //获取保密字段
    if($flag_hidden_type == 0)
    {
        $secret_fields = "";
    }
    else if($flag_hidden_type == 1)
    {
        //获得设计步骤号
        $query3 = "select FLOW_PRCS from ".$table_flow_run_prcs." where RUN_ID = '".$run_id."' and PRCS_ID = '".$PRCS_ID."' limit 1";
        $cursor3 = exequery(TD::conn(),$query3);
        if($row3 = mysql_fetch_array($cursor3))
        {
            $FLOW_PRCS = $row3['FLOW_PRCS'];
        }
        
        //获得步骤保密字段
        $table_flow_prcocess = $use_databases."flow_process".$archive_time;
        $secret_fields = "";
        $query3 = "select HIDDEN_ITEM from ".$table_flow_prcocess." where FLOW_ID = '".$flow_id."' and PRCS_ID = '".$FLOW_PRCS."' ";
        $cursor3 = exequery(TD::conn(),$query3);
        if($row3 = mysql_fetch_array($cursor3))
        {
            $secret_fields = $row3['HIDDEN_ITEM'];
        }
    }
    else if($flag_hidden_type == 2)
    {
        //获得流程所有步骤的保密字段
        $table_flow_prcocess = $use_databases."flow_process".$archive_time;
        $secret_fields = "";
        $query3 = "select HIDDEN_ITEM from ".$table_flow_prcocess." where FLOW_ID = '".$flow_id."' ";
        $cursor3 = exequery(TD::conn(),$query3);
        while($row3 = mysql_fetch_array($cursor3))
        {
            $secret_fields .= $row3['HIDDEN_ITEM'].",";
        }
        
        //去掉重复的
        $secret_fields = td_trim($secret_fields);
        $secret_fields = str_remove_dup($secret_fields);
    }
    
    $config = Array(
        'FLOW_VIEW' => '12345',
        'db' => $use_databases,
        'archive_time' => $archive_time,
        'secret_fields' => $secret_fields
    );

    $obj_export_zip = new TWorkExport($flow_id, $run_id, 0,0,0, $config);
    $a_export = $obj_export_zip->export_all_run();
	//print_r($a_export);
    $s_attachment_id = $a_export['attachment_id'];
    $s_attachment_name = $a_export['attachment_name'];
    $content_html = $a_export['content_html'];
	
	$query4="select data_2,data_2_key from flow_data_161 where run_id='$RUN_ID' limit 1";
	$cursor4=exequery(TD::conn(),$query4);
	while($row4=mysql_fetch_array($cursor4)){
		$data_2=str_replace("*",",",$row4["data_2"]);
		$data_2_key=$row4["data_2_key"];
		}
	 $s_attachment_id.=$data_2_key; 	
	 $s_attachment_name.=$data_2;
	// echo $s_attachment_id."<br>";
	//echo $s_attachment_name."<br>";
	
    //处理文件名称 /\*:?"<>|
    $j = 0;
    $char="/,\\,*,:,?,\",<,>,|";
    while($j < strlen($run_name))
    {
        $str = substr($run_name, $j, 1);
        if(find_id($char, $str))
        {
            $run_name = str_replace($str,"",$run_name);
        }
        $j++;
    }
    
    if(!$zip->addEmptyDir($run_name))
    {
        continue;
    }
    
    $zip->addFromString($run_name."/".$run_name.".html", $content_html);
   // echo $s_attachment_id."<br>";
    $a_attachment_id = explode(",",$s_attachment_id);
    $a_attachment_name = explode(",",$s_attachment_name);
    
    $feedbck_count_id = sizeof($a_attachment_id);
    for($k=0; $k < $feedbck_count_id; $k++)
    {
        if($a_attachment_id[$k] == '')
        {
            continue;
        }
        
        $filename = attach_real_path($a_attachment_id[$k],$a_attachment_name[$k]);
       
        if(!$filename)
        {
            continue;
        }
        
        $tmp_filename = get_tmp_filename("workflow_attach", basename($filename));
        
        if(decrypt_attach($filename, $tmp_filename))
        {
            $filename = $tmp_filename;
            $tmp_file_array[] = $tmp_filename;
        }
        
        $zip->addFile($filename, $run_name."/".$a_attachment_name[$k]);
    }
}//while

$zip->close();

ob_end_clean();
/*
Header("Cache-control: private");
Header("Content-type: application/x-zip");
header("Accept-Ranges: bytes");
header("Accept-Length: ".sprintf("%u", filesize($zip_file)));
header("Content-Disposition: attachment; ".get_attachment_filename($zip_name));
*/
//readfile($zip_file);
echo $zip_file."<br>";
$PATH="E:/MYOA/attach/".$zip_name;  
echo @copy($zip_file,$PATH)?'成功':'失败';
//echo @rename($file1,$PATH)?'成功':'失败';//2677@1505_1668115426

foreach ($tmp_file_array as $tmp_file)
{
    @unlink($tmp_file);
}
?>

1.实现OA事务提醒信息直接到RTX系统提醒。 2.RTX点击消息提醒“查看详情”直接打开OA相应界面。 3.集成安装主要在服务器端实施,客户端不需要安装插件、设置OA网站、登陆用户名、密码,基本零设置直接实现集成。 本帖修正本 《OA-RTX事务提醒集成插件(2011测试通过)》的所有问题,通达2013、RTX2012测试完美通过。解决的问题如下: 1. 修正 找不到“RTX事务提醒设置”的问题 2. 修正 错误#1136: Column count doesn't match value count at row 1 SQL语句: INSERT INTO `sys_function` VALUES ('1003', 'z0R2', 'RTX事务提醒设置', 'system/rtx_sms') 问题 3. 修正RTX 的OA面板出现“用户名及密码错误”的问题,很多人到现在都不能解决 一【统一用户名】 1.现将OA部门用户信息在通达oa2013里添加完毕)(用户名等信息等)。 2.通达oa系统管理-组织结构管理-用户管理:选择导出RTX格式。 3.打开腾讯通RTX管理器,导入用户信息(后期增加的用户oa及rtx两边个增加一次确保用户名一致即可)。 二【RTX修改】 1.RTXSERVER安装目录下找到AppConnConfig文件用记事本打开,加入OA服务器IP地址 2.运行RTX管理器,进入"系统工具"-"客户端面板定制",添加新面板,面板对应网址设置为 http://OA域名:端口/ispirit/rtx_sign.php?c5f6vCqiVY43be9LzdBuwiztGdtHrWh6S0P9vYt3Y74edjWrXlArQPCG8lrM3qQ 3.重启RTX所有服务 三【oa修改】 1..通达OA服务器设置:下载安装RTX2012SDK rtxserver2012formal.exe 到OA服务器. 2. OA目录下找到inc\utility_sms1.php,改名为utility_sms1_original.php 3. 下载本帖新的修正附件,解压缩覆盖webroot文件夹 4. 打开OA登陆界面,点击升级。 5. 管理员账号登陆OA,进入“系统设置”-“系统接口设置”,添加一个接口用户,插件默认接口用户设置为rtx/rtx,(可以自己设置) (*重要的一步) 6.重启通达oa通达应用服务控制心“所有服务 (*重要一步) 7.进入“系统设置”-"RTX事务提醒设置" 设置好RTX服务器IP、 RTX服务器的IP地址等即可 6.重启通达oa通达应用服务控制心“所有服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hai7425

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值