山上有一棵松 2025-06-08 12:08 采纳率: 88.9%
浏览 7
已结题

pb12.5搭建一个webservice客户端,取数据窗口的数据取不到

pb12.5做了一个webservice客户端,客户端取不到服务端数据窗口中的数据,只能取到数据窗口的标题,请教哪位怎么能解决一下?
这个是调用按钮里面的代码:

img

这个是具体情况:

img

  • 写回答

5条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-06-08 12:36
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。

    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    根据您提供的信息,这是一个PowerBuilder 12.5调用WebService获取数据窗口数据的问题。从代码和描述来看,问题可能出在以下几个方面:

    问题分析

    1. 服务端返回的数据格式问题:客户端只能获取到标题,说明服务端可能没有正确返回数据内容
    2. 数据窗口创建语法问题dw_1.create(ls_syntax,error_create) 这一步可能有语法错误
    3. 数据导入方式问题importstring 方法可能不适合当前数据格式

    解决方案

    1. 首先检查服务端返回的数据
      在调用 uf_getdw 方法后,先检查返回的 ls_data 内容:
    messagebox("返回数据", ls_data)
    
    1. 确保数据窗口语法正确
    // 检查数据窗口创建语法
    if len(error_create) > 0 then
        messagebox("创建错误", "语法错误:" + error_create + "~r~n语法内容:" + ls_syntax)
        return -1
    end if
    
    1. 尝试使用JSON或XML格式传输数据
      如果服务端支持,建议修改为返回JSON或XML格式数据:
    sequenceDiagram
        participant 客户端
        participant 服务端
        客户端->>服务端: 请求数据(JSON格式)
        服务端-->>客户端: 返回完整JSON数据
        客户端->>客户端: 解析JSON并填充数据窗口
    
    1. 完整修改后的代码示例
    long ll_rv, ll_result
    string ls_syntax, ls_data, error_create
    soapconnection i_conn
    n_webservicesoap iws_proxy_obj
    
    // 创建连接
    i_conn = create soapconnection
    ll_result = i_conn.setsoaplogfile("testsoap.log")
    ll_result = i_conn.createinstance(iws_proxy_obj, "n_webservicesoap")
    
    try
        // 获取数据窗口语法和数据
        ls_data = iws_proxy_obj.uf_getdw(ls_syntax)
        
        // 调试输出
        messagebox("调试", "语法:" + ls_syntax + "~r~n数据:" + ls_data)
        
        // 创建数据窗口
        dw_1.create(ls_syntax, error_create)
        if len(error_create) > 0 then
            messagebox("错误", "创建数据窗口失败:" + error_create)
            return -1
        end if
        
        // 尝试不同导入方式
        if left(ls_data, 1) = "{" then  // 假设是JSON格式
            ll_rv = dw_1.importjson(ls_data)
        else
            ll_rv = dw_1.importstring(ls_data)
        end if
        
        if ll_rv < 1 then
            messagebox("警告", "导入数据失败,返回代码:" + string(ll_rv))
        end if
    
    catch (soapexception e)
        messagebox("异常", "调用WebService出错:" + e.getmessage())
    end try
    
    // 清理对象
    destroy iws_proxy_obj
    destroy i_conn
    

    其他建议

    1. 检查WebService方法实现
      • 确保服务端的 uf_getdw 方法返回了完整的数据窗口数据和语法
      • 可以在服务端调试,确认返回的数据是否完整
    1. 网络抓包分析
      使用Fiddler或Wireshark等工具捕获SOAP请求和响应,检查实际传输的数据内容
    1. 日志分析
      检查生成的 testsoap.log 文件,查看详细的SOAP交互信息

    如果问题仍未解决,建议提供以下信息以便进一步分析:

    • 服务端 uf_getdw 方法的实现代码
    • 完整的SOAP请求和响应内容(可从日志中获取)
    • 数据窗口的具体定义
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月8日