2

先决条件:

我想在包执行开始时连接到 MS Dynamics CRM Web 服务并在整个包中重用连接,但我未能通过 SSIS 变量做到这一点。

我无法使用连接管理器,因为我使用OrganizationService.Execute了 WebService 任务向导不支持的方法

脚步:

  1. 在 GAC 和脚本引用中添加了 Microsoft.Xrm.Sdk dll;
  2. 在里面创建了数据流任务和两个单独的脚本任务
  3. 创建了 2 个包变量crmOrganizationServicecrmOrganizationServiceProxy
    • 两种类型System.Object
    • script task 1并且script task 2可以读写它们
  4. 内部script task 1

    • 实例化 OrganizationServiceProxyOrganizationService连接到 MS Dynamics CRM Web 服务。
    • 将对象的两个实例都分配给变量

      //create public OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(orgServiceManagement, adCredentials); public IOrganizationService _service =(IOrganizationService)_serviceProxy; //assign this.Variables.crmOrganizationServiceProxy= _serviceProxy; this.Variables.crmOrganizationService=_service;

  5. 内部script task 2

    OrganizationServiceProxy _serviceProxy = (OrganizationServiceProxy)this.Variables.crmOrganizationServiceProxy

错误:

在第 5 步,我收到 Invalid cast 异常,因为无法转换System.ObjectMicrosoft.Xrm.Sdk.Client.OrganizationServiceProxy

解决方法:

我确定问题出在变量的基本装箱中,同时在脚本任务之间传递它们。但是我没有找到更好的通用方法。在其中,我需要在脚本任务之间传递自定义类的实例。

4

1 回答 1

1

您可以使用反射或自定义 SSIS 组件,但这样做可能不值得。

另一种选择是在 SSIS 包和 CRM 之间托管临时 Web 服务,并将连接缓存在 Web 服务中。也许这对你来说容易多了。

于 2016-06-09T07:43:41.337 回答