`
eworkflow
  • 浏览: 221623 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Web自定义表单调用WebService

阅读更多

在上篇的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的方法: 

Js代码
 1 /**
 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类代码:

  

WebServiceHelper.cs类代码
  1 public class WebServiceHelper
  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, truetrue);
 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     }

 

 

 

 

              

  • 大小: 37.9 KB
  • 大小: 29 KB
  • 大小: 17.6 KB
  • 大小: 38.3 KB
  • 大小: 19 KB
分享到:
评论

相关推荐

    调用webservice,通过post传参读取返回的XML

    4. **调用WebService**:在.NET环境中,可以通过`System.Web.Services.Protocols.SoapHttpClientProtocol`类或者更简单的Web Reference(在.NET Framework 4.0之后被WCF取代)来调用WebService。这里提到的`Ajax....

    Web Service调用打印机打印自定义表单

    Web服务调用打印机打印自定义表单是一种常见的技术应用场景,特别是在企业级系统中,需要将数据转换为可打印的文档格式。在这个过程中,开发者通过调用Web Service接口,实现远程控制本地或网络打印机来完成打印任务...

    新手学C#调用Webservice使用教程(使用环境VS2012)

    为了在动态网页中调用WebService,首先需要创建一个Web窗体,并通过***界面编码实现用户输入和结果展示。在这个过程中,需要使用各种HTML和***控件如TextBox、Button和Label等,来构建用户界面,并通过事件处理函数...

    工作流(WorkflowService)WebService接口使用说明.doc

    工作流(WorkflowService)是泛微协同办公系统中一个关键组件,它提供了通过WebService接口与外部业务系统进行数据交互的能力。本使用说明旨在详细介绍如何利用这些接口进行有效的流程管理和任务处理。 1. **检查...

    泛微E9二开资源包,webService包含细节说明

    开发者可以利用这些接口实现自定义表单的设计,包括数据的获取、提交、验证等操作,同时也可以实现个性化界面和交互逻辑。 在进行泛微E9的二次开发时,开发者需要深入理解以上各部分,结合实际业务需求,灵活运用...

    Asp.Net的webService简单示例

    本示例主要展示了如何在C#中创建一个简单的Web服务,并利用jQuery进行调用,以及如何返回自定义的JSON数据,而非依赖ASP.NET默认的`{d:content}`格式。 首先,创建一个新的ASP.NET Web服务项目。在Visual Studio中...

    WebService开发手册.doc

    动态调用是指在运行时动态地调用WebService,生成调用类是指根据WSDL文件生成调用类。 调用方式的选择 调用方式的选择取决于业务需求和系统架构。动态调用可以提高系统的灵活性和可扩展性,生成调用类可以提高系统...

    工作流webservice_xml.rar

    3. 表单定义:泛微的动态表单数据也是通过XML来描述,允许用户自定义表单结构和逻辑,增强了系统的灵活性。 四、开发实践 在实际开发过程中,首先需要获取泛微提供的Webservice WSDL文件,这包含了接口的定义和服务...

    jQuery调用WebService的实现代码

    【jQuery调用WebService详解】 在Web开发中,jQuery是一个非常流行的JavaScript库,它简化了DOM操作、事件处理以及Ajax交互。而WebService作为一种跨平台、跨语言的数据交换方式,常常用于前后端数据通信。本文将...

    Delphi WebService简单实例

    在Delphi中,创建一个WebService客户端通常涉及以下步骤:添加THTTPRIO组件到表单,配置其URL指向服务,然后调用其方法。 5. **ISOAPDebug**: "ISOAPDebug"可能是这个示例中使用的特定类或接口,用于增强调试过程。...

    C#HttpHelper类

    2. **发送POST请求**:POST请求常用于向服务器发送数据,如表单提交或API调用。`HttpHelper`类会提供一个方法,接收URL、要发送的数据以及可能的额外头部信息,然后发送POST请求并处理响应。 3. **设置请求头**:...

    工作流(WorkflowService)WebService接口使用说明.rar

    首先,Ecology8和Ecology9的webservice开发文档会详细介绍每个接口的功能、调用方式以及参数设置。这些接口通常包括但不限于启动工作流、查询工作流实例、办理任务、结束工作流等操作。开发者可以通过这些接口实现...

    泛微OA工作流WebService接口使用说明书.docx

    泛微OA工作流WebService接口是企业信息化管理中用于集成不同系统间工作流程的重要工具,它提供了多种接口供外部业务系统调用,实现自动化的工作流程处理。以下是对这些接口的详细说明: 1. **流程创建接口**: ...

    自定义MOSS服务,启动流程

    这个接口通常用C#或VB.NET编写,并且继承自System.Web.Services.WebService或Microsoft.SharePoint.WebControls.SPSolutionService。 2. **实现服务**:接下来,你需要实现服务接口,编写具体的服务逻辑。这可能...

    使用ASIFormDataRequset类 获取webservice 接口数据

    在iOS开发中,与Web服务接口进行数据交互是常见的任务,特别是当应用需要从服务器获取或发送数据时。ASIFormDataRequest是旧版的第三方库ASINetworkQueue的一部分,用于简化HTTP请求,特别是处理表单数据的提交。...

    D6 SOAP_WEB SERVICE

    Delphi的代码生成器能够自动生成WSDL(Web服务描述语言)文件,这是一个XML文档,描述了Web服务的接口和消息格式,方便客户端进行绑定和调用。 文件"D6 SOAP_WEB SERVICE程序设计下.pdf"很可能是关于这个主题的详细...

    Webservice.js

    4. **自定义服务**:在Angular中,开发者可以创建自定义服务来封装与Web服务的交互,这样可以提高代码复用性和可维护性。Webservice.js可能就是这样的一个服务,它可能包含了与特定API的交互逻辑。 5. **版本控制**...

    Web性能测试与负载测试

    - **添加WebService测试**:通过在Web测试中插入WebService测试来模拟真实环境中的调用。 - **配置请求**:设置请求的URL和SOAPAction等属性。 - **查看和服务文档**:通过浏览器查看WebService的文档,了解服务接口...

    webservice asp.net mvc3 html css

    【标题】:Web服务在ASP.NET MVC3框架下的实现,结合HTML、CSS及表单元素的应用 【描述】:在ASP.NET MVC3框架下构建Web服务是一个强大的开发方式,它结合了HTML、CSS以及诸如单选按钮(radio)和复选框(checkbox...

    ASP.NET实现基于Forms认证的WebService应用实例

    因此,有两个主要问题需要解决:一是WebService默认情况下不支持Cookie,二是WebService的自动调用性质与基于Web表单的交互方式不匹配。 在给定文档中,提供了一种解决方案,即通过配置Web.config文件允许非匿名...

Global site tag (gtag.js) - Google Analytics