2017-02-16 5 views
0

abgerufen werden Ich brauche ein Plugin, die Datensätze in CRM Online abrufen. Dieses Plugin wird auf Dynamics CRM 365 On-Premise registriert. Ich habe versucht, alles, was ich weiß, um dieses Plugin zu erstellen, auch das Tutorial im Internet suchen. Aber jedes Mal, wenn ich das Plugin getestet habe. Es heißt immerWie Datensätze in CRM Online durch Plugin in Dynamics CRM 365 On-Premise

"Metadaten enthält Referenz, die nicht aufgelöst werden kann https://office.api.crm5.dynamics.com/XRMServices/2011/Organization.svc".

Nachdem ich diesen Fehler zum ersten Mal bekommen habe, überprüfe ich, ob der obige Link in meinem PC durchsucht werden kann. Und ich bin sicher, dass der Link durchsuchbar ist. Um CRM Online über das CRM 365-Plugin zu verbinden. Ich benutze diesen Code:

private static void ConnectToMSCRM() 
    { 
     try 
     { 

      ClientCredentials credentials = new ClientCredentials(); 
      credentials.UserName.UserName = "[email protected]"; 
      credentials.UserName.Password = "crmpass"; 
      ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; }; 
      Uri serviceUri = new Uri("https://office.api.crm5.dynamics.com/XRMServices/2011/Organization.svc"); 
      OrganizationServiceProxy proxy = new OrganizationServiceProxy(serviceUri, null, credentials, null); 
      proxy.EnableProxyTypes(); 

Und auf der anderen Seite, ich schreibe dies zu überprüfen, ob ich eine Online-CRM verbinden kann oder nicht:

IPluginExecutionContext context = (IPluginExecutionContext)serprov.GetService(typeof(IPluginExecutionContext)); 
     IOrganizationServiceFactory serfac = (IOrganizationServiceFactory)serprov.GetService(typeof(IOrganizationServiceFactory)); 
     IOrganizationService service = serfac.CreateOrganizationService(context.UserId); 

     if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity) 
     { 
      Entity ent = (Entity)context.InputParameters["Target"]; 

      // presaledid = ent.GetAttributeValue<String>("new_presalesid"); 
      try 
      { 
       ConnectToMSCRM(); 
      } 
      catch (Exception ex) 
      { 
       throw new InvalidPluginExecutionException(ex.Message); 
      } 

      Guid userid = ((WhoAmIResponse)_service.Execute(new WhoAmIRequest())).UserId; 
      if (userid != Guid.Empty) 
       return; 

Die Code Rückkehr Fehlermeldung. Metadaten enthalten Referenzen, die nicht aufgelöst werden können. Seltsamerweise kann ich, wenn ich denselben Code in der Konsolenanwendung verwende, eine Verbindung mit CRM Online herstellen. Ich bin ein bisschen frustriert. Fast 5 Tage bekommen immer noch keine Lösung. Wenn Sie einen Hinweis für mich haben, den Fehler zu beheben. Bitte sagen Sie mir :)

Auch ich habe eine andere Bedingung, während dieses Plugin getestet. Ich bin im Kundenbüro. Um auf CRM 365 On-Premise zuzugreifen, geben sie mir einen Benutzernamen und ein Passwort für die Verbindung mit dem WLAN. Während der Verbindung dieses Wi-Fi. Ich kann auf CRM 365 On-Premise zugreifen. Aber ich kann CRM Online nicht verbinden (kein Internetzugang). In meinem Plugin-Code muss ich mich mit CRM Online verbinden, um die Datensätze zu erhalten. Weil, wenn ich erfolgreich bin, mich zu verbinden, Konsolenanwendung verwendend, verwende ich mein persönliches wifi mit Internetverbindung. Ist das die Ursache für dieses Problem?

Antwort

0

Wenn ich richtig verstehe, sagen Sie, dass der On-Prem-CRM-Dienst keinen Internetzugang hat. Wie kann es dann auf CRM Online zugreifen?

Auch schlage ich den vereinfachten Connection (https://msdn.microsoft.com/library/gg695810(v=crm.7).aspx) aus der Microsoft.Xrm.Client Bibliothek oder XRM Tooling (https://msdn.microsoft.com/en-us/library/mt608573.aspx), wenn Sie CRM verwenden 2016. Es gibt viele verschiedene Authentifizierungsszenarien. Eine Verbindung zu CRM Online besteht aus einer ganzen Kette von Authentifizierungen, Tokens und Weiterleitungen. Diese Tools behandeln all das, indem Sie nur eine einfache Verbindungszeichenfolge angeben.

Bearbeiten: Beispielcode (Arbeiten an CRM 2016 on-Prem, im Gespräch mit CRM online).

Um die vereinfachte Verbindung Client.dll zu verwenden, müssen Sie entweder in die Serverablage (was ich für einen schnellen Test getan habe) oder ILMerge das Plugin mit der Bibliothek. Habe dieses Beispiel-Plugin bei account create registriert, könnte aber alles Mögliche sein. Korrekt die UserId vom Remote-System (CRM Online) erhalten.

public class TestOnlinePlugin : IPlugin 
{ 
    public void Execute(IServiceProvider serviceProvider) 
    { 
     CrmConnection conn = CrmConnection.Parse("Url=https://***.crm4.dynamics.com; Username=***; Password=***;"); 
     IOrganizationService orgService = new OrganizationService(conn); 

     WhoAmIRequest req = new WhoAmIRequest(); 
     WhoAmIResponse resp = (WhoAmIResponse) orgService.Execute(req); 

     throw new InvalidPluginExecutionException($"Remote user ID: {resp.UserId}"); 
    } 
} 
+0

Wie wäre es dann mit On-Prem, die keinen Internetzugang haben? Sind das nicht die Probleme? –

+0

Kürzlich habe ich versucht, vereinfachte Verbindung zu verwenden. Es braucht Microsoft.Xrm.Client.dll. Aber ich kann es nicht in CRM 365 SDK finden. Was soll ich machen ? –

+0

Wenn es keinen Internetzugang hat, wie möchten Sie mit CRM online sprechen? Wenn nicht direkt vom Server, dann müssen Sie mindestens einen Dienst auf einem anderen Rechner hosten können, der sowohl Internetzugriff als auch Verbindung zum internen CRM hat. Der Xrm.Client ist nicht mehr Bestandteil des 2016/365 SDK. Es wurde durch die Microsoft.Xrm.Tooling.Connector.dll ersetzt, die auf die gleiche Weise verwendet werden kann. In den meisten Fällen können Sie auch den Microsoft.Xrm.Client zusammen mit dem neueren SDK verwenden. Der einfachste Weg besteht darin, nuget-Pakete zu verwenden, um loszulegen. – kowgli

Verwandte Themen