泛微OA源碼修改之給客戶webservice接口增加查詢方法


1. 問題描述

  • 在CRM里面創建合同審批流程,審批結束后,需要在OA里面創建一條對應的合同流程。
  • OA合同流程表單有個"客戶"字段,CRM需要傳客戶的id到數據庫,但CRM系統中客戶的id和OA里面客戶的id不對應,所有需要給CRM寫一個根據客戶名稱查詢客戶id的方法。
  • 原webservice的方法只有三個:新增,編輯,刪除。沒有查詢接口。

2. 解決辦法

直接修改源代碼,增加查詢接口。

  • 到服務器上,將OA目錄下(D:\WEAVER\ecology\classbean\com\engine\crm\interfaces\webservice)的CrmService.classCrmServiceImpl.class文件拷貝到idea進行反編譯。
  • 新建對應的CrmService.javaCrmServiceImpl.java文件,使用notepad++打開,將反編譯的代碼復制進去。
  • 依葫蘆畫瓢增加客戶查詢("customerFind")方法
    在CrmService.java里面加入如下代碼:
// 根據客戶名稱查詢客戶id,接口名稱叫"customerFind"
@WebMethod(
     operationName = "customerFind",
     action = "urn:com.engine.crm.interfaces.webservice.CrmService.customerFind"
)
String customerFind(String var1) throws Exception;

在CrmServiceImpl.java里面加入如下代碼:

// 根據客戶名稱查詢客戶id,實現"customerFind"接口
public String customerFind(String khmc) {
    String khid = "";
    RecordSet rs = new RecordSet();
    rs.executeQuery("select id from CRM_CustomerInfo where name=?", new Object[] {khmc});
    if (rs.next()) {
        khid = rs.getString("id");
    }
    return khid;
}

3. 更新。

3.1 放入服務器,服務器會自動編譯java文件生成class文件。

3.2 在OA里面注冊webservice的"customerFind"方法。

4. 測試

4.1 基於CXF(Celtix + XFire)調用webservice,引入pom依賴:

  <!--webservice -->
  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.10</version>
  </dependency>

  <dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.1.10</version>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-ws</artifactId>
    <version>1.3.3.RELEASE</version>
  </dependency>

  <dependency>
    <groupId>wsdl4j</groupId>
    <artifactId>wsdl4j</artifactId>
  </dependency>

4.2 代碼測試

    /**
     * 調用webservice接口,查找客戶。
     */
    public String customerFind() {
        // 創建動態客戶端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();

        // 對方的wsdl地址
        Client client = dcf.createClient("http://192.168.10.116/services/CrmService?wsdl");
        String json = null;
        try {

            QName qName = new QName("http://localhost/services/CrmService", "customerFind");
            String paraXml = "泛微網絡233"; // 參數不用傳xml格式的,直接傳String

            String userId = "730"; // OA里面用戶的id

            Object[] objects1 = client.invoke(qName, paraXml.toString(), userId); // 參數1,參數2,參數3......按順序放就看可以

            json = JSONObject.toJSONString(objects1[0]);
            System.out.println("返回數據:" + json.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return json;

    }

4.3 返回結果

接口增加成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM