`
mondayw
  • 浏览: 144685 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

[译文] 使用Safesforce.com和Java来整合云计算应用(下)

阅读更多

原文:Integrate your Cloud Computing Apps with Salesforce.com, Java

作者:Andrew Lawlor

出处:http://www.devx.com/SaaS/Article/44382/0/page/1

 

 

 

[译文] 使用Safesforce.com和Java来整合云计算应用(上)

 

 

Force.com的应用控制器层

 

用户接口层有着很好的“视图”和“控制”的分离,本节着眼于如何充实控制器以调用web service,这样就可以显示适当的数据。

可以注意到<apex:page>包含了扩展的属性,该属性标明了名为AccountServiceController的控制器(MVC中的C)扩展,这就是我们扩展Financial_Account_c对象这一标准Visualforce控制器的行为的地方,通过整合外部的web service来增加检索账户余额这一功能,以下是Apex类的完整清单:

 

global class AccountServiceController {

    Financial_Account__c account;

    String balance ='';   

    //控制器

    public AccountServiceController(ApexPages.StandardController stdController) {

        this.account = (Financial_Account__c)stdController.getRecord();       

    }

    //设置和获取账户余额

    public String getAccountBalance() {

        String accountNumber = [Select Account_Number__c from Financial_Account__c where Id=:account.Id].Name;

        //调用服务

        balance = showBalance(accountNumber);

        return balance;

    }

    public void setAccountBalance(String balance) {

        this.balance = balance;

    }

    //向外调用web service 

    static String showBalance(String accountNumber) {

        String accountBalance = '';

        /向外调用验证

        String isValid = AuthenticationCallout();

        System.debug('Auth Result '+ isValid);

        if(isValid == 'true'){

            AccountService.AccountServicePort stub = new AccountService.AccountServicePort();

            stub.setApexTest(testFlag);                   

            accountBalance = stub.getAccountBalance(accountNumber);        

        }

        return accountBalance;

    }

    //验证调用 (低成本—真实情况下使用双向SSL)

    public static string AuthenticationCallout (){

        HttpRequest req = new HttpRequest();              

  req.setEndpoint('https://aptaria.com:9081/HttpAuthentication/Authenticate');

        req.setMethod('POST');

        req.setBody('username=admin&password=admin123');

        Http http = new Http();

        String result = '';

        // 既然不是在做测试,我们发起一个真正的调用

        HttpResponse res = http.send(req);

        System.debug('Authenticateresult'+res.getHeader('authValid'));

        result = res.getHeader('authValid');

         return result;

    }

}

 

Visualforce在试图为{!AccountBalance}完成变量替换时自动地调用getAccountBalance方法,该方法使用SOQL标明了来自页面上下文的账户号(AccountNumber),并调用了showBalance方法,showBalance方法首先使用简单的身份验证来检查到外部web service的权限,在真实的实现中,你可能会想要更强有力的整合形式——例如双向SSL之类的方式。

一旦验证通过,方法就会调用我们导入WSDL文件时自动生成的AccountService方法,该方法相应地调用外部的web service并返回指定账户的余额,Visualforce随后透明地给用户显示返回的账户余额,仿佛数据是驻留在云一端的。

 

通力合作

 

机构内部的账户余额服务是可用的,并通过Apache Axis来启用Web ServiceForce.com平台的网络安全设置已经配置成允许向外发送的Web Service调用可以调用这一关键服务,WSDL已被加载到我们的应用中,使得我们的应用能够很容易的调用外部的web service,账户页面上的Visualforce已经修改成使用控制器扩展来提取账户余额,这一控制器扩展被编码成调用由WSDL自动生成的代码来调用外部的AccountBalance这一web service

当用户登录到理财应用上并浏览到某个指定账户号(例如10001002)的金融账户页面时,屏幕如下显示:

 

 

 

 

 

这里的关键之处在于,账户10001002的账户余额($12,345.68)与该账户页面中其他数据看起来没有什么区别(尽管因为网络的等待时间在这一字段显示之前会有轻微的延迟),用户不会知道该数据是由外部的资源提供的,该整合模式的聚合提供了对这一敏感数据的无缝透明的访问。

 

其他的整合场景

 

前面的演示重点集中在外出的Web Service调用这一用例上,不过对于一个成功的云提供者(cloud-source)策略来说,其他的场景也是同样重要的。该应用通过调用机构内部应用中的更新数据的服务,可用来完成账户转账的用例。无论何时只要有数据发生变化,你就可以使用内置的Froce.com触发器和工作流功能来执行这一过程,或者使用代码调度器来指定一天或者一周中的某些特定时间中进行这样的转账。

相反,机构内部的应用能够通过传入的整合访问构建在Force.com平台上的应用的业务逻辑和数据,为了启用这一功能,只要简单地把webservice这一关键字添加到任意的Apex方法中就可以了——Force.com栈会处理余下的所有其用来装备web service的工作。例如,机构内部的基础设施可能会调用Force.com的一个web service来返回Force.com组织(org)中的可用账户的总数,一旦Apex方法已做了web service的启用,就可以使用Force.com平台来简单地生成相应的WSDL文件,该文件可被加载到外部的基础设施中,以便能够很容易地与云应用作整合。

使用Force.com进行整合的一个常见用途是同步两个互补的企业系统之间的数据,许多组织机构使用Salesforce.com来建立CRM应用,而使用其他的诸如SAP或者Oracle的应用来构建ERP,至关重要的是,这两个企业系统要正确地同步他们的账户数据,整合通常用于这一目的。由于新的客户被封闭在Salesforce.comCRM系统中,作为一种实现和支持,可以使用外出的web service调用来通知下游的ERP系统。一种相反的情况则是,客户通常被直接添加到ERP系统中,在这种情况下,ERP系统可通过进来的web service调用来向Force.com上的应用通报新的账户。

其他的整合场景包括电子邮件服务(发送或者接收来自可信任源的电子邮件),当然还有调用基于HTTP的服务而不是本文中使用的SAOP服务这种情况。

 

小结

 

本文探讨了如何整合Force.com平台和机构内部的基于Java的基础设施,我们展示了通过把机构内部的Java服务的数据和逻辑直接整合到Force.com应用上,聚合如何被用来无缝安全的利用这些数据和逻辑,然后大概描述了其他的一些整合技术。

Force.com平台提供了无缝整合以云为源的应用到企业中的强大能力,构建在Force.com平台上的应用能够很容易地生产或者消费现有应用的数据和服务,更多的开发者资源可在http://developer.force.comDeveloper Force上找到。

 

 

 

  • 大小: 42.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics