欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    挖掘审计信息.pdf

    • 资源ID:74667019       资源大小:528.44KB        全文页数:26页
    • 资源格式: PDF        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    挖掘审计信息.pdf

    35710 挖掘审计信息挖掘审计信息 业务流程越自动化,就越需要有关可用信息,即在什么时间做什么和为什么这样做。MQSeries Workflow 的审计功能将提供这些信息。在本章中,我们将研究如何挖掘这些信息以改进业务流程,并开发一些实例查询和报告来协助业务流程的执行。35810.1 MQSeries Workflow审计跟踪审计跟踪 现在,我们将研究一些在 MQSeries Workflow3.3 中用到的新审计特征。我们将打开审计日志,但登录的不是 DB2 正常运行时数据库而是审计队列。这将最大限度地减少激活审计日志所带来的性能损耗。审计记录以 XML 格式编写,很容易通过 MQSI 阅读。审计数据将载入单独的数据库,这样在查询时就不会影响正常运行时性能。我们将示范简单的基于 SQL 来查询审计数据的监控器。10.2 激活审计跟踪工具激活审计跟踪工具 在编写本书时,构建时环境还不支持指定 MQSeries 审计跟踪。我们将手动编辑 FDL 文件激活审计日志来跟踪队列。有关完整 FDL 语法列表的详细信息,请参考MQSeries Workflow3.3 使用构建时的启动编号:SH12-6286-06 的第七章“FDL 定义”。由于只对一些基本事件感兴趣,所以我们将详细说明审计跟踪的浓缩版本。有关审计跟踪记录格式和定义的完整描述,请参考MQSeries Workflow 3.3管理指南编号:SH12-6289-04 的第五章“如何使用审计跟踪”。在域(DOMAIN)定义的过程(PROCESS)部分中添加以下行:CONDENSED AUDIT_TO_MQ 在组(GROUP)定义中添加以下行:AUDIT_QUEUE_MANAGER_NAME MQSI01QM AUDIT_QUEUE_NAME MQSI.AUDIT 保存 FDL 文件并使用实用程序 fmcibie 加载到正常运行时数据库。10.3 使用使用MQSeries Integrator加载数据库加载数据库 我们将执行非常简单的消息流把审计跟踪从消息队列压栈(dumps)到数据库。在这种情况下,数据库插入将异步执行,也就是说它将独立于工作流进程。图 10-1 显示了完全的 BuyXYZ_Store_Audit_Trail 消息流。359 图10-1消息流概览 该消息流非常简单。它读取适当的审计队列并将引入消息字段存入数据库。该消息流没有任何过滤或选择逻辑。它将以原始格式保存每个审计消息。这是很重要的,因为我们不想在仓库贮存阶段丢失信息,并且这一方法不会限制或过滤所存数据。10.3.1 审计跟踪审计跟踪XML消息格式消息格式 审计跟踪消息有一种 XML 格式。消息中包含 WfMessage 标题和 AuditTrailRecord XML文件夹。实例 10-1 显示简单的审计消息。实例10-1审计跟踪实例XML消息 No 2001-04-24 13:04:44 21006 Order Process UAAAAAEALsAAAAAAAAAAAAAAAAABAC4AAAAAAAAAAAAAUA=Order Process UAAAAAEALsAAAAAAAAAAAAAAAAABAC4AAAAAAAAAAAAAUA=Order Process 2001-04-24 12:53:17 ValidateCustomer ValidateCustomer 21100 36021200 QQAAAAEALsAAAAAAAAAAAAAAAAAMAAAAAQAuAAAAAAAAAA AAAAAAAAxB 该实例不包含与 AuditTrailRecord 文件夹相关的所有 XML 字段。这就意味着对于消息来说并不需要包含所有审计字段。有关审计消息格式的详细信息,请参考MQSeries Workflow3.3管理指南编号:SH12-6291-06 的第三十四章“MQ 工作流 XML 消息格式”。表 10-2 包含了 XML 消息元素和数据库元素的详细清单。10.3.2 创建数据库表创建数据库表 对于审计记录来说,MQSeries Workflow 正常运行时数据库包含称为 AUDIT_TRAIL 的表。我们使用同样的字段定义了同一张表作为 CUSTOMER 数据库的一部分。该消息流将把审计消息记录到数据库中。这样做的目的是保持审计记录与 MQSeries Workflow 内部数据隔离。表 10-1 显示了我们用以在 CUSTOMER 数据库中创建新表的脚本。表10-1创建审计表的脚本 脚本名称脚本名称 描述描述 buyxyz_audit_ddl.cmd 该脚本包含 SQL 命令以创建现有 CUSTOMER 数据库中的表。表 10-2 显示了审计跟踪记录的元素。该描述列来自MQSeries Workflow3.3管理指南编号:SH12-6289-04。带有“?”的 XML 字段是 AuditTrailrecord XML 文件夹的可选字段。表10-2审计跟踪元素 XML 消息字段消息字段 DB 属性属性 描述描述 时戳(Timestamp)CREATED 可写入审计跟踪记录的日期及时间 AuditEvent EVENT 事件类型 361 XML 消息字段消息字段 DB 属性属性 描述描述 ProcTemplValidFromDate?TEMPL_VALID_FROM 相关过程模型的日期变得有效。ActivityType?ACTIVITY_TYPE 如果审计跟踪记录是为活动编写的,那么该字段包含该活动的类型。ActivityState?ACTIVITY_STATE 如果该审计跟踪记录是为与某个活动有联系事件而编写的,那么字段包含该活动的状态。ProgramRC?ACTIVITY_RC 返回活动代码。ProcInstName PROCESS_NAME 过程实例名称。ProcInstID PROCESS_ID 过程实例的对象标识符。ProcInstTopLevelName TOP_LVL_PROC_NAME 如果过程实例正在作为子过程执行,即与过程名称中一样的子过程(如果该过程实例是最高级别过程实例的话),那么则为最高级别过程实例的名称 ProcInstTopLevelID TOP_LVL_PROC_ID 如果过程实例正在作为子过程执行,即与过程标识符中一样的子过程(如果该过程实例是最高级别过程实例的话),那么则为最高级别过程实例的对象标识符。ProcInstParentName?PARENT_PROC_NAME 如果过程实例正在作为子过程执行,那么则为父级过程实例的名称。362 XML 消息字段消息字段 DB 属性属性 描述描述 ProcInstParentID?PARENT_PROC_ID 如果过程实例正在作为子过程执行,那么则为父级过程实例的对象标识符。ProcTemplName PROC_TEMPL_NAME 过程模型名称。BlockNames?BLOCK_NAMES 包含有活动中所有块的相连名称。由圆点将各种名称分开。UserID?USER_NAME 与事件有关联用户的 ID,该事件是写入审计跟踪的原因。如果该审计跟踪记录由MQ工作流系统写入,则不对该字段进行填充。SecondUserID?SECOND_USER_NAME 与事件有关联的第二个用户的 ID,该事件是写入审计跟踪的原因。ActivityName?ACTIVITY_NAME 如果审计跟踪条目与活动相关,那么该字段包含活动的名称。如果审计跟踪条目与控制连接程序相关,那么该字段包含控制连接程序源的活动名称。SecondActivityName?SECOND_ACT_NAME 如果审计跟踪是为与控制连接程序相关的事件而编写的,那么字段包含目标活动的名称。363 XML 消息字段消息字段 DB 属性属性 描述描述 XML 消息字段 DB 属性 描述 CommandParameters?COMMAND_ PARAMETERS 如果该事件是程序活动的开始,则该字段包含调用程序时所通过的实际参数。AssociatedObject?ASSOCIATED_OBJECT 包含与事件相关的对象标识符。在 MQ 工作流数据库中可用于定位对象。ObjectDescription?OBJECT_DESCRIPTION 包含与事件相关的对象描述。ProgramName?PROGRAM_NAME 如果该事件是某个程序活动的开始,那么该字段包含程序名称。10.3.3 BuyXYZ_Store_Audit_Trail消息流细节消息流细节 该消息流包含两个节点。图 10-2 和图 10-3 显示了该 MQInput 节点的设置。图10-2 MQInput节点细节 364 图10-3 MQInput节点细节 该 MQInput 节点以 MQSeries Workflow 格式接收 XML 消息。第二个节点是数据库节点,它将把字段插入数据库,参见图 10-4。365 图10-4数据库节点细节 在引入 XML 消息中有可选字段和强制字段,但我们将此插入定义为一套完整的字段。10.4 SQL查询查询 虽然实时分析审计信息并立即修改业务流程的执行似乎是不错的主意,但您必须全面考虑类似这样流程的可行性和实际益处。使用错误的设计方法,可能会减慢业务流程的执行并带来一些负面影响。366这就是在本节中我们只给出简单查询来创建聚集值的原因。下一步将是创建调度工作流进程,并使用聚集值更新数据库中的控制参数。例如,调度工作流可能会启动 UPES 活动,该活动将检查供应商的平均响应时间并将他们以周为基础进行分类。为此,我们必须定义适当的并可测量的值。在本节中,我们将说明阅读审计信息和创建简单查询的要点。我们定义了简单查询来示范如何利用由 MQSeries Integrator 消息流存储的审计信息进行工作。有关如何分析审计消息的更多信息,请参考MQSeries Workflow3.3管理指南编号:SH12-6289-04 的第五章“如何使用审计跟踪”。10.4.1 分析审计信息分析审计信息 为了建立查询和来自原始审计跟踪的统计表,我们有以下几种可能的方法。每个审计记录都包含“CREATED”字段,它可以用来计算响应时间和其他时间间隔。存在与过程级别、活动级别和工作项目级别相关的不同事件。基本的过程事件如表 10-3 所示。这些事件存储在表 AUDIT_TRAIL 的 EVENT 字段中。表10-3过程审计事件实例 事件类型事件类型 事件值(事件值(DB 中的事件属性)中的事件属性)已创建与启动的过程 21018 启动过程 21000 正常结束的过程 21004 正常结束及删除的过程 21025 终止的过程 21005 在查询过程中,我们可以使用这些事件来创建与全部过程执行相关的统计表。367活动信息与给定的流标识符相关。这意味着我们能够提取与某些过程相关的活动信息。但我们也可以创建聚集信息,其独立于不同的过程实例。活动事件存储在表 AUDIT_TRAIL 的 EVENT 字段中,但在 ACTIVITY_STATE 字段中活动同样有事件条目。对于活动状态来说,ACTIVITY_TYPE 字段记录了有关活动类型的必要信息。表 10-4 显示了通用活动事件类型。表10-4活动审计事件实例 事件类型事件类型 事件值事件值 活动就绪 21006 已启动的活动 21007 正常结束的活动 21011 到期的活动 21081 终止的活动 21027 手动退出的活动 21014 表 10-5 显示了通用活动状态。表10-4活动状态实例 活动状态活动状态 状态值状态值(ACTIVITY_STATE 属性)属性)就绪 21200 运行 21201 完成 21202 终止 21205 到期 21213 在实例中,我们只使用了 EVENT 字段的值,因为这些信息足以创建实例 SQL 查询。要创建更深入更详尽的查询,还有其他可用字段。例如,ACTIVITY_RC 显示了 UPES调用的原因码。也有关于手动活动的信息,例如用户(USER_NAME)自定义了特定命令。368有关那些数据在审计跟踪中可用的更多信息,请参考MQSeries Workflow3.3管理指南编号:SH12-6289-04 的第五章“如何使用审计跟踪”。请注意在本节中,我们没有列举全部的状态代码和事件代码。要查看这些代码,请参考MQSeries Workflow3.3管理指南编号:SH12-6289-04。10.4.2 实例查询实例查询 下面给出的查询都是非常简单的实例。您可以使用数据挖掘工具或其他分析程序来创建更复杂更灵活并且带有不同输入变量的查询(例如,活动名称与/或 from 日期和 to 日期作为输入变量)。已完成过程的总数已完成过程的总数 该概念将计算来自已启动的审计跟踪的不同过程标识符的数量。实例 10-2 所示的查询非常简单。我们将用已启动过程事件(21000)与已创建并启动过程事件(21018)来获得结果。实例10-2SQL查询1 SELECT A.PROC_TEMPL_NAME,COUNT(DISTINCT A.PROCESS_ID)FROM AUDIT.AUDIT_TRAIL AS A WHERE A.EVENT IN(21000,21018)GROUP BY A.PROC_TEMPL_NAME;过程执行的平均时间过程执行的平均时间 在实例 10-3 所示的查询中,我们选择了过程启动事件(21000,21018)的时戳与过程完成事件(21025,21004)的时戳。实例10-3SQL查询2 SELECT A.PROC_TEMPL_NAME,AVG(B.CREATED-A.CREATED)FROM AUDIT.AUDIT_TRAIL AS A,AUDIT.AUDIT_TRAIL AS B WHERE A.EVENT IN(21000,21018)AND B.EVENT IN(21025,21004)AND A.PROCESS_ID=B.PROCESS_ID GROUP BY A.PROC_TEMPL_NAME;请注意上面给出的查询并不完整。AVG 函数不会返回所期望的结果,因为两个时戳值的差异是 DECIMAL 值。完整查询将更加复杂。有关完整查询的详细信息,请参考第397 页附录 B“实例程序安装”。369到期到期 SupplyOrder 活动活动 实例 10-4 所示的查询与过程总数查询非常相似,但其中的选择操作是针对活动而不是针对过程的。我们将计算到期 SupplyOrders 和 BackupSupplyOrders 的数量。为此,我们将通过 ACTIVITY_NAME 来过滤这些活动。下面是实例 SQL 代码。实例10-4 SQL查询3 SELECT A.ACTIVITY_NAME,COUNT(A.PROCESS_ID)FROM AUDIT.AUDIT_TRAIL AS A WHERE A.EVENT IN(21081)AND A.ACTIVITY_NAME IN(SupplyOrder,BackupSupplyOrder)GROUP BY A.ACTIVITY_NAME;取消订单的数量取消订单的数量 实例 10-5 所示的查询与前面的查询相同,只是带有不同的 EVENT 和 ACTIVITY_NAME字段。实例10-5 SQL查询4 SELECT ACTIVITY_NAME,COUNT(A.PROCESS_ID)FROM AUDIT.AUDIT_TRAIL AS A WHERE A.EVENT IN(21011)AND A.ACTIVITY_NAME IN(CancelOrder)GROUP BY ACTIVITY_NAME;SupplyOrder 和 BackupSupplyOrder 的平均响应时间 实例 10-6 所示的查询逻辑与实例 10-3 所示的相同(过程执行的平均时间)。在本案例中,我们将选择相应的活动而不是过程。实例10-6 SQL查询5 SELECT A.PROCESS_ID,A.ACTIVITY_NAME,(B.CREATED-A.CREATED)FROM AUDIT.AUDIT_TRAIL AS A,AUDIT.AUDIT_TRAIL AS B WHERE A.EVENT=21007 AND B.EVENT=21011 AND A.PROCESS_ID=B.PROCESS_ID AND A.ACTIVITY_NAME=B.ACTIVITY_NAME AND A.ACTIVITY_NAME IN(SupplyOrder,BackupSupplyOrder);这些 SQL 实例仅是全部查询的摘录。有关完整 SQL 的详细信息,请参考第 397 页附录B 中的“实例应用程序安装”。370索价过高订单的数量索价过高订单的数量 实例 10-7 所示的查询将计算带有特定状态的特定活动数量。实例10-7 SQL查询6 SELECT A.ACTIVITY_NAME,COUNT(A.ACTIVITY_NAME)FROM AUDIT.AUDIT_TRAIL AS A WHERE A.ACTIVITY_NAME=CheckPriceAND A.EVENT=21007 GROUP BY A.ACTIVITY_NAME;审批级别(审批级别(approval escalations)数量)数量 实例 10-8 所示的查询与实例 10-7(索价过高的数量)非常相似。实例10-8 SQL查询7 SELECT A.ACTIVITY_NAME,COUNT(A.ACTIVITY_NAME)FROM AUDIT.AUDIT_TRAIL AS A WHERE A.ACTIVITY_NAME=EscalationAND A.EVENT=21007 GROUP BY A.ACTIVITY_NAME;这样,有了这些信息,我们就可以(例如以周为基础)决定选择哪个供应商作为特定产品的主供应商。其选择标准可能是:?哪个供应商的响应时间最短?这可以使我们改进客户服务水平协议,从而吸引更多的客户,因为我们可以更快速地交付产品。?哪个供应商总是在协议规定的时间范围内按时回复?供应商可能在其回复时很快速,但在更多情况下,回复并没有按时到达或根本没有到达,从而导致 SupplyOrder活动到期。?哪个供应商的索价最低?不幸的是,MQSeries Workflow 不允许审计数据容器。这些信息可以在订单数据库中得到。然而,项目索价过高的次数可能会指出哪个供应商的索价最低。37110.5 为审计跟踪创建报告页为审计跟踪创建报告页 我们将创建 Web 报告页来监控订单过程。我们使用的工具是 WebSphere Studio 高级版,它可使 HTML 和 JSP 代码的创建更简单快速。有关使用 WebSphere Studio 的更详细的描述,请参考该产品提供的HTML WebSphere Studio 手册。10.5.1 定义定义ODBC连接连接AUDIT 我们必须添加 ODBC 连接 AUDIT,它将指向 CUSTOMER 数据库。我们可以重复使用已定义的到 CUSTOMER 数据库的 ODBC 连接 CUSTOMER。然而考虑到性能,我们还是决定创建新的 ODBC 连接。有关用法说明的详细信息,请参考第 249 页的第 5.9.3 节“创建远程 ODBC 连接”。10.5.2 创建已完成过程创建已完成过程Web页的总数页的总数 在本节中,我们将描述如何在 WebSphere 应用服务器中建立简单的称为 JSP 的 HTML页。该实例将用于已完成过程的总数。然后,您可以按照同样的模式建立其余六个报告。以下是建立 Web 页以显示已完成过程数量所必须执行的步骤:?创建称为 BuyxyzAudit 的新项目。?用 SQL Wizard 创建 SQL 查询。?用数据库向导创建 HTML 和 JSP 页。?发布并将页复制到适当位置。?更新已发布的带有 JSP 路径的 HTML 页。现在,让我们来更详尽地执行这些步骤:1.启动 WebSphere Studio,然后使用其默认模板创建称为 BuyxyzAudit 的新项目。2.单击工具(Tools)-向导(Wizards)-SQL Wizard,将弹出如图 10-5 所示的窗口。Select SQL 语句的名称是 NCP,NCP 代表已完成过程总数(Total Number of Completed Processes)。372 图10-5 SQL Wizard步骤1 3.然后,我们必须指定连接参数,如图 10-6 所示。图10-6 SQL Wizard步骤2 3734.单击连接(Connect)按钮连接数据库,将弹出如图 10-7 所示的窗口。添加 AUDIT图表并单击确定(OK)。图10-7 SQL Wizard步骤3 5.选择 TOTAL_PROC_NUM 表(视图)并将其加入 Selected tables 窗格,如图 10-8所示。图10-8 SQL Wizard步骤4 6.在下一步中,我们将添加PROC_TEMPL_NAME和TOTAL_NUMBER列到Selected columns 窗格,如图 10-9 所示。374 图10-9 SQL Wizard步骤5 7.单击完成(完成(Finish)按钮。NCP.sql SQL 查询已创建。8.单击工具(Tools)-向导(Wizards)-数据库向导(Database Wizard),将弹出如图 10-10 所示的窗口。9.选择 SQL 语句名 NCP.sql。图10-10数据库向导 10.在 Markup Language 窗口中(图 10-11),我们必须选择 JSPModel 和 HTML 标记语言。375 图10-11为HMTL选择JSPModel类型 11.我们不需更改 Web 页、输入页、结果页以及数据库向导中的方法(Methods)和会话(Session)窗口。在完成(完成(Finish)窗口中,我们必须将前缀改为 NCP_,如图 10-12 所示。图10-12 已生成JSP和HTML文件 12.在 单 击 完 成(Finish)之 后,已 经 生 成NCP_HTMLInput.html和NCP_HTMLResults.jsp 页(图 10-13)。376 图10-13 WebSphere Studio关系视图 13.为 了 发 布 项 目BuyxyzAudit,我 们 要 找 到NCP_HTMLInput.html和NCP_HTMLResults.jsp 页,并将其复制到设备 M23BZZYP 中以下目录,该设备上安装有 WebSphere 应用服务器:-将 NCP_HTMLInput.html 复制到 mqwfcfgsxyz1Webclientwebpages 目录中-将 NCP_HTMLResult.jsp 复制到 mqwfcfgsxyz1Webclientwebpagesprograms目录中 14.在NCP_HTMLInput.html文 件 中,我 们 必 须 改 变post方 法 来 指 向NCP_HTMLResults.jsp 存在的 目 录。为了 完 成 这一操 作,我们必 须 打 开NCP_HTMLInput.html 文件,并更改如实例 10-9 所示的行。实例10-9在JSP中更新目录设置 to:377在本节中,我们已经说明了如何创建 HTML 和 JSP 页来显示已完成过程的总数。然而,我们还要定义另外六个查询,生成另外六个报告。表 10-6 显示了已生成的报告:表10-6 BuyxyzAudit报告表 报告名称报告名称 HTML 文件名称文件名称 JSP 文件名称文件名称 已完成过程的总数 NCP_HTMLInput.html NCP_HTMLResult.jsp 过程执行的平均时间 ATPE_HTMLInput.html ATPE_HTMLResult.jsp 到期的 SupplyOrders ESO_HTMLInput.html ESO_HTMLResult.jsp 已取消订单的数量 NCO_HTMLInput.html NCO_HTMLResult.jsp SupplyOrder 和 BackupSupplyOrder的平均响应时间 ASO_HTMLInput.html ASO_HTMLResult.jsp 索价过高订单的数量 NOO_HTMLInput.html NOO_HTMLInput.html 审批级别的数量 NAE_HTMLInput.html NAE_HTMLResult.jsp 10.6 审计跟踪的报告页审计跟踪的报告页 提示:在每次添加新的 JSP 以后,我们必须重启 MQWF Web 客户机WebSphere 管理控制台中的 XYZ1 Web 应用服务器实例。如果想要查看已完成过程的总数,我们必须打开 Web 浏览器浏览如下网页:http:/m23bzzyp/MQWFClient-XYZ1/NCP_HTMLInput.html,如图 10-14 所示。378 图10-14审计报告提交窗体 单击提交(Submit)按钮,JSP 将返回如图 10-15 所示的 SQL 查询结果。图10-15审计查询结果窗体 379我们可以通过在浏览器地址栏中输入该 HTML 页的正确位置来查看每个报告页,例如 http:/m23bzzyp/MQWFClient-XYZ1/ATPE_HTMLInput.html,这是过程执行的平均时间报告的 HTML 页。有关其他 HTML 文件名的详细信息,请参考表 10-6。代替为每个报告生成单独页,我们将提供一个 HTML 文件和一个包含了所有报告的 JSP文件。这两个文件是 BuyxyzAudit.html 和 Audit_Results.jsp。图10-16审计报告提交窗体 图 10-17 和图 10-18 显示了两种查询的不同运行结果。第二种查询中的已完成过程的数量报告的运行结果如图 10-19 所示。380 图10-17所有查询的审计报告 381 图10-18所有查询的审计报告部分1 382 图10-19所有查询的审计报告部分2

    注意事项

    本文(挖掘审计信息.pdf)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开