- 浏览: 221615 次
- 性别:
- 来自: 北京
-
最新评论
-
LinApex:
请使用js好吗?
利用开发框架中的标签库集成报表工具 -
qiu768:
博主你们是直接用jquerymobile+phonegap实现 ...
工作流软件管理系统移动客户端的开发 -
shige19:
流程与业务表单的关联:流程->任务->表单
aspx页面集成工作流引擎api -
shige19:
工作流中集成页面:1 流程环节绑定页面url;2 页面处理中调 ...
工作流集成第三方aspx页面 -
shige19:
流程关联多单据:1 多单据只是针对主从表情况;2 单据与流程的 ...
工作流集成表单之多张单据和一张单据
在上篇的web自定义表单集成协同办公管理平台中提到web自定义表单开发工具已经成为协同产品继工作流之后的核心组件。在协同产品中web自定义表单开发工具的价值主要体现在:1、解决协同产品的通用性和用户需求个性化的矛盾;2、为异构系统提供数据展现的接口。
第一个价值点很好理解,就是客户可以在协同平台的基础上用web自定义表单开发工具开发业务表单,并绑定好企业的业务流程实现个性化的协同应用,固化组织的管理规范,更重要的保障了管理规范的有效执行,提升组织执行力。第二个价值点体现在既然是协同办公平台就需要和其他异构业务系统进行数据整合。在web自定义开发工具中与异构业务系统的数据整合分为两种:一种是业务系统提供访问数据库的连接,在web自定义表单工具中通过数据库连接直接访问业务系统的数据库实现数据的提取。这种方式在数据安全方面有一定的问题,客户一般不接受这种方式。第二种就是业务系统提供webservice接口,在web自定义开发工具中直接调用并接收返回数据显示。调用webservice的接口在web自定义开发工具中提供了两种接口,下面用示例演示调用的方法。
1、 用JS调用WebService,用JS调用WebService的方法比较简单,首先封装了一个JS调用WebService的方法,然后在设计表单时可以直接调用即可。下面是用Js调用WebService的表单实现过程。
步骤一:新建一个简单的web自定义表单,在表单中增加一个button,自定义button的点击事件函数,在函数中调用封装好的JS调用WebService的方法,并用提示信息查 看WebService的返回值。
步骤二:运行表单查看结果。
附:JS调用WebService的方法:


2 * @func 通过JS调用webservice并接收返回XML数据
3 * @param url 调用webservice的url路径
4 * var url = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx";
5 * @param methodname webservice的方法名
6 * var methodname = "getRegionDataset";
7 * @param args 参数列表,多个参数以“,”分隔
8 * var args = "";
9 * @param argnames webservice的方法的变量名,多个变量以","分割
10 * var argnames = "";
11 * @param _namespace 命名空间
12 * var _namespace = "http://WebXml.com.cn/";
13 **/
14 function GetXmlByWebServiceForJs(url,methodname,argnames,args,_namespace)
15 {
16 var xmlhttp = createXMLHttpRequest();
17 var data;
18 data = '<?xml version="1.0" encoding="utf-8"?>';
19 data = data + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">';
20 data = data + '<soap:Body>';
21 data = data + '<'+methodname+' xmlns="'+_namespace+'">';
22 if (args != "")
23 {
24 var arr = args.split(",");
25 var arr1 = argnames.split(",");
26 for(var i=0;i<arr.length;i++)
27 {
28 data = data + '<'+arr1[i]+'><![CDATA['+arr[i]+']]></'+arr1[i]+'>';
29 }
30 }
31 data = data + '</'+methodname+'>';
32 data = data + '</soap:Body>';
33 data = data + '</soap:Envelope>';
34
35 xmlhttp.Open("POST",url, false);
36 xmlhttp.SetRequestHeader ("Content-Type","text/xml; charset=utf-8");
37 xmlhttp.SetRequestHeader ("Content-Length",getlen(data));
38 xmlhttp.SetRequestHeader ("SOAPAction",_namespace+methodname);
39 xmlhttp.Send(data);
40
41 return xmlhttp.responseText;
42 }
43
44 //Create XMLHttpRequest Object
45 function createXMLHttpRequest()
46 {
47 var xmlhttp;
48 if(window.ActiveXObject)
49 {
50 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
51 }
52 else if(window.XMLHttpRequst)
53 {
54 xmlhttp=new XMLHttpRequest();
55 }
56 return xmlhttp;
57 }
58
59 //Get Request Data's length
60 function getlen(str)
61 {
62 var bytesCount=0;
63 for (var i = 0; i < str.length; i++)
64 {
65 var c = str.charAt(i);
66 if (/^[\u0000-\u00ff]$/.test(c)) //匹配双字节
67 {
68 bytesCount += 1;
69 }
70 else
71 {
72 bytesCount += 2;
73 }
74 }
75 return bytesCount;
76
77 }
2、 动态调用WebService,以前调用WebService的时候都是直接添加引用的方式,然后调用服务端的方法,而web自定义表单设计初衷是表单设计后不用编译直接运行。查找相关资料后整理了动态调用WebService的方法,表单设计时直接调用并接收返回结构。
设计思路:
具体实现步骤:
步骤一:参照JS调用WebService的表单设计过程。
步骤二:运行表单查看结果。
附:WebServiceHelper.cs类代码:


2 {
3 #region InvokeWebService
4
5 /// <summary>
6 /// 动态调用web服务
7 /// </summary>
8 /// <param name="url">URL</param>
9 /// <param name="methodname">方法名</param>
10 /// <param name="args">参数</param>
11 /// <returns>object</returns>
12 public static object InvokeWebService(string url, string methodname, object[] args)
13 {
14 return WebServiceHelper.InvokeWebService(url, null, methodname, args);
15 }
16
17 /// <summary>
18 /// 动态调用web服务
19 /// </summary>
20 /// <param name="url">URL地址</param>
21 /// <param name="classname">类名</param>
22 /// <param name="methodname">方法名</param>
23 /// <param name="args">方法参数</param>
24 /// <returns>方法返回值</returns>
25 public static object InvokeWebService(string url, string classname, string methodname, object[] args)
26 {
27 string @namespace = "EnterpriseServerBase.WebService.DynamicWebCalling";
28
29 if ((classname == null) || (classname == ""))
30 {
31 classname = WebServiceHelper.GetWsClassName(url);
32 }
33
34 try
35 {
36 //获取WSDL
37 WebClient wc = new WebClient();
38 IWebProxy proxy = WebRequest.GetSystemWebProxy();
39 proxy.Credentials = CredentialCache.DefaultCredentials;
40 wc.Proxy = proxy;
41
42 Stream stream = wc.OpenRead(url + "?WSDL");
43 ServiceDescription sd = ServiceDescription.Read(stream);
44 ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
45
46 sdi.ProtocolName = "Soap"; //指定访问协议。
47 sdi.Style = ServiceDescriptionImportStyle.Client; //生成客户端代理。
48 sdi.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync;
49
50
51 sdi.AddServiceDescription(sd, "", "");
52 CodeNamespace cn = new CodeNamespace(@namespace);
53
54 //生成客户端代理类代码
55 CodeCompileUnit ccu = new CodeCompileUnit();
56 ccu.Namespaces.Add(cn);
57 sdi.Import(cn, ccu);
58 CSharpCodeProvider csc = new CSharpCodeProvider();
59
60 ICodeCompiler icc = csc.CreateCompiler();
61 //设定编译参数
62 CompilerParameters cplist = new CompilerParameters();
63 cplist.GenerateExecutable = false;
64 cplist.GenerateInMemory = true;
65 cplist.ReferencedAssemblies.Add("System.dll");
66 cplist.ReferencedAssemblies.Add("System.XML.dll");
67 cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
68 cplist.ReferencedAssemblies.Add("System.Data.dll");
69
70 //编译代理类
71 CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
72 //CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
73
74 if (true == cr.Errors.HasErrors)
75 {
76 System.Text.StringBuilder sb = new System.Text.StringBuilder();
77
78 foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
79 {
80 sb.Append(ce.ToString());
81 sb.Append(System.Environment.NewLine);
82 }
83
84 throw new Exception(sb.ToString());
85 }
86
87 //生成代理实例,并调用方法
88 System.Reflection.Assembly assembly = cr.CompiledAssembly;
89 Type t = assembly.GetType(@namespace + "." + classname, true, true);
90 object obj = Activator.CreateInstance(t);
91 System.Reflection.MethodInfo mi = t.GetMethod(methodname);
92 ParameterInfo[] pars = mi.GetParameters();
93 for (int i = 0; i < pars.Length; i++)
94 {
95 if (args[i].GetType().Name != pars[i].ParameterType.Name)
96 {
97 args[i] = Convert.ChangeType((object)args[i], pars[i].ParameterType);
98 }
99 }
100
101 return mi.Invoke(obj, args);
102 }
103 catch (Exception ex)
104 {
105 return "Error-" + ex.Message + ex.InnerException.Message;
106 }
107
108
109 }
110
111 /// <summary>
112 /// GetWsClassName
113 /// </summary>
114 /// <param name="strUrl">URL</param>
115 /// <returns>ClassName</returns>
116 private static string GetWsClassName(string strUrl)
117 {
118 string[] parts = strUrl.Split('/');
119 string[] pps = parts[parts.Length - 1].Split('.');
120 return pps[0];
121 }
122 #endregion
123 }
发表评论
-
工作流之设置表访问权限
2015-01-19 20:34 1940在工作流管理系统中,工作流引擎负责流程的流转。首先梳理业务, ... -
工作流之设置表访问权限
2015-01-19 20:34 1009在工作流管理系统中,工作流引擎负责流程的流转。首先梳理业务, ... -
利用工作流返回达到无限次重复办理业务的过程
2015-01-04 14:21 1240在和客户的交流中,有客户提出有这样的业务流程: 申 ... -
IE8用ajax访问不能每次都刷新的问题
2014-07-10 18:36 627最近发现,用ajax访问后台,用ie8访问,第一次可以正常返 ... -
java项目开发框架
2014-07-07 11:37 712做项目的时候,最需要快速开发框架来辅助。好的快速安全的开发 ... -
如何设置流程的默认版本
2014-04-29 20:00 763业务流程用工作流软件 ... -
简单设置eworkflow条件的方式
2014-01-03 11:46 1216在eworkflow自定义工作流产品中,设置条件节点,是在 ... -
流程多节点调用同一张业务表单的锚点问题
2013-11-19 19:56 1229在工作流的实施中,经常会有客户提出,一个业务流程中,同一张业 ... -
java工作流软件发送邮件的方案
2013-11-01 17:03 1296利用javamail的功能将发送邮件的功能集成到java工作 ... -
工作流软件是未来web的支柱
2013-10-30 17:13 960Web 3.0正在敲门,但是 ... -
自定义表单中多附件上传控件的实现方案
2013-10-25 11:53 1445多附件上传的功能,在我们开发系统的时候经常会需要,客户的需求 ... -
流程节点中发送邮件的解决方案
2013-10-15 18:14 1035在流程引擎中,需要 ... -
财务报销流程
2013-09-11 12:33 1873给客户做的财务报销流程示例说明文档: 业务介绍 ... -
tomcat6配置jndi连接数据库的方式
2013-08-26 10:31 822eworkflow工作流+eform表单+ebiao报表集 ... -
动态获取当前执行人或指定步骤执行人的上级
2013-08-14 10:27 1356流程在一个业务节点办理完成后,到达下一个节点,产生下一个节 ... -
流程节点多场景多表单
2013-07-27 13:51 990工作流的流转,每一个办理过程就是一个流程节点,实际办理业务 ... -
oracleclient连oracle库 报System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
2013-07-17 09:32 1000在iis下发布eworkflow+eform+ebiao的 ... -
IE10中session失效取不到值的问题
2013-07-12 09:18 1725在eworkflow工作流,ebiao报表,eform自定义 ... -
动态指定下一步任务的参与人
2013-06-22 15:32 4106在流程运行的时候, ... -
任务超期后的定时器处理
2013-06-22 08:25 1186工作流管理系统中, ...
相关推荐
4. **调用WebService**:在.NET环境中,可以通过`System.Web.Services.Protocols.SoapHttpClientProtocol`类或者更简单的Web Reference(在.NET Framework 4.0之后被WCF取代)来调用WebService。这里提到的`Ajax....
Web服务调用打印机打印自定义表单是一种常见的技术应用场景,特别是在企业级系统中,需要将数据转换为可打印的文档格式。在这个过程中,开发者通过调用Web Service接口,实现远程控制本地或网络打印机来完成打印任务...
为了在动态网页中调用WebService,首先需要创建一个Web窗体,并通过***界面编码实现用户输入和结果展示。在这个过程中,需要使用各种HTML和***控件如TextBox、Button和Label等,来构建用户界面,并通过事件处理函数...
工作流(WorkflowService)是泛微协同办公系统中一个关键组件,它提供了通过WebService接口与外部业务系统进行数据交互的能力。本使用说明旨在详细介绍如何利用这些接口进行有效的流程管理和任务处理。 1. **检查...
开发者可以利用这些接口实现自定义表单的设计,包括数据的获取、提交、验证等操作,同时也可以实现个性化界面和交互逻辑。 在进行泛微E9的二次开发时,开发者需要深入理解以上各部分,结合实际业务需求,灵活运用...
本示例主要展示了如何在C#中创建一个简单的Web服务,并利用jQuery进行调用,以及如何返回自定义的JSON数据,而非依赖ASP.NET默认的`{d:content}`格式。 首先,创建一个新的ASP.NET Web服务项目。在Visual Studio中...
动态调用是指在运行时动态地调用WebService,生成调用类是指根据WSDL文件生成调用类。 调用方式的选择 调用方式的选择取决于业务需求和系统架构。动态调用可以提高系统的灵活性和可扩展性,生成调用类可以提高系统...
3. 表单定义:泛微的动态表单数据也是通过XML来描述,允许用户自定义表单结构和逻辑,增强了系统的灵活性。 四、开发实践 在实际开发过程中,首先需要获取泛微提供的Webservice WSDL文件,这包含了接口的定义和服务...
【jQuery调用WebService详解】 在Web开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及Ajax交互。而WebService作为一种跨平台、跨语言的数据交换方式,常常用于前后端数据通信。本文将...
在Delphi中,创建一个WebService客户端通常涉及以下步骤:添加THTTPRIO组件到表单,配置其URL指向服务,然后调用其方法。 5. **ISOAPDebug**: "ISOAPDebug"可能是这个示例中使用的特定类或接口,用于增强调试过程。...
2. **发送POST请求**:POST请求常用于向服务器发送数据,如表单提交或API调用。`HttpHelper`类会提供一个方法,接收URL、要发送的数据以及可能的额外头部信息,然后发送POST请求并处理响应。 3. **设置请求头**:...
首先,Ecology8和Ecology9的webservice开发文档会详细介绍每个接口的功能、调用方式以及参数设置。这些接口通常包括但不限于启动工作流、查询工作流实例、办理任务、结束工作流等操作。开发者可以通过这些接口实现...
泛微OA工作流WebService接口是企业信息化管理中用于集成不同系统间工作流程的重要工具,它提供了多种接口供外部业务系统调用,实现自动化的工作流程处理。以下是对这些接口的详细说明: 1. **流程创建接口**: ...
这个接口通常用C#或VB.NET编写,并且继承自System.Web.Services.WebService或Microsoft.SharePoint.WebControls.SPSolutionService。 2. **实现服务**:接下来,你需要实现服务接口,编写具体的服务逻辑。这可能...
在iOS开发中,与Web服务接口进行数据交互是常见的任务,特别是当应用需要从服务器获取或发送数据时。ASIFormDataRequest是旧版的第三方库ASINetworkQueue的一部分,用于简化HTTP请求,特别是处理表单数据的提交。...
Delphi的代码生成器能够自动生成WSDL(Web服务描述语言)文件,这是一个XML文档,描述了Web服务的接口和消息格式,方便客户端进行绑定和调用。 文件"D6 SOAP_WEB SERVICE程序设计下.pdf"很可能是关于这个主题的详细...
4. **自定义服务**:在Angular中,开发者可以创建自定义服务来封装与Web服务的交互,这样可以提高代码复用性和可维护性。Webservice.js可能就是这样的一个服务,它可能包含了与特定API的交互逻辑。 5. **版本控制**...
- **添加WebService测试**:通过在Web测试中插入WebService测试来模拟真实环境中的调用。 - **配置请求**:设置请求的URL和SOAPAction等属性。 - **查看和服务文档**:通过浏览器查看WebService的文档,了解服务接口...
【标题】:Web服务在ASP.NET MVC3框架下的实现,结合HTML、CSS及表单元素的应用 【描述】:在ASP.NET MVC3框架下构建Web服务是一个强大的开发方式,它结合了HTML、CSS以及诸如单选按钮(radio)和复选框(checkbox...
因此,有两个主要问题需要解决:一是WebService默认情况下不支持Cookie,二是WebService的自动调用性质与基于Web表单的交互方式不匹配。 在给定文档中,提供了一种解决方案,即通过配置Web.config文件允许非匿名...