2010-06-04 12 views
0

J'écris une application qui se connecte à CRM à l'aide de CRM SDK 4. Dans la première version, j'ai utilisé le fichier app.config (section 'connectionStrings')Création de 'chaîne de connexion' dans CRM SDK 4 par programmation

<connectionStrings> 
    <add name="mycrm" connectionString="Authentication Type=Integrated; Server=http://ServerName/OrganizationName;"/> 
</connectionStrings> 

et (en code):

DataContext ctx = new DataContext("mycrm"); 

et il fonctionne très bien. Mais maintenant, l'application devrait permettre à l'utilisateur de choisir le type d'authentification, le nom du serveur, l'identifiant, le mot de passe, etc. J'ai créé une chaîne de connexion, mais je ne sais pas comment l'utiliser. Les objets DataContext et CrmConnection, AFAIK, n'ont que des constructeurs avec le nom connectionString (du fichier app.config) comme paramètre. Lorsque je tente d'utiliser mon connectionString je me exception:

System.ApplicationException was unhandled 

message = "Impossible de charger le nom de chaîne de connexion 'authentification Type = intégré, serveur = http://ServerName/OrganizationName;'" Source = "Microsoft.Xrm.Client" StackTrace: à Microsoft.Xrm.Client.CrmConnection.GetConnectionStringFrom (String connectionStringName) à Microsoft.Xrm.Client.CrmConnection..ctor (String connectionStringName, String connectionString) à Microsoft.Xrm.Client.CrmConnection..ctor (String connectionStringName) à ARP.EstateExtensions.PaymentsUploader.MainWindows..ctor (String connectionString) dans C: \ Users \ mroba szynski \ Desktop \ PU \ PaymentsUploader \ MainWindows.xaml.cs: ligne 38 à ARP.EstateExtensions.PaymentsUploader.LoginWindow.bOK_Click (expéditeur d'objet, RoutedEventArgs e) dans C: \ Utilisateurs \ mrobaszynski \ Desktop \ PU \ PaymentsUploader \ LoginWindow. xaml.cs: ligne 92 à System.Windows.EventRoute.InvokeHandlersImpl (source de l'objet, RoutedEventArgs args, Boolean relance) à System.Windows.UIElement.RaiseEventImpl (expéditeur de DependencyObject, RoutedEventArgs args) à System.Windows.Controls.Button .OnClick() à System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (MouseButtonEventArgs e) à System.Windows.RoutedEventArgs.InvokeHandler (__gVirt_NP_NN_NNPS<__ gestionnaire délégué, cible de l'objet) à System.Windows.EventRoute.InvokeHandlersImpl (source de l'objet, Arguments RoutedEventArgs, Boolean reRaised) à System.Windows.UIElement.ReRaiseEventAs (expéditeur de DependencyObject, RoutedEventArgs args, RoutedEvent NewEvent) à System.Windows.UIElement.OnMouseUpThunk (de l'expéditeur de l'objet, MouseButtonEventArgs e) à System.Windows.RoutedEventArgs.InvokeHandler (gestionnaire délégué, cible de l'objet) à System.Windows.EventRoute.InvokeHandlersImpl (source d'objets, RoutedEventArgs args, Boolean relance) à System.Windows.UIElement.RaiseEventImpl (expéditeur de DependencyObject, RoutedEventArgs args) à System.Windows.UIElement.RaiseEvent (RoutedEventArgs args, Boolean confiance) à System.Windows.Input.InputManager.ProcessStagingArea() à System.Windows.Input.InputManager.ProcessInput (entrée InputEventArgs) à System.Windows.Input.InputProviderSit e.ReportInput (InputReport inputReport) à System.Windows.Interop.HwndMouseInputProvider.ReportInput (IntPtr hwnd, mode InputMode, horodatage Int32, actions RawMouseActions, Int32 x, Int32 y, roue Int32) à System.Windows.Interop.HwndMouseInputProvider. FilterMessage (hwnd IntPtr, Int32 msg, IntPtr wParam, lParam IntPtr, Boolean & traitées) à System.Windows.Interop.HwndSource.InputFilterMessage (hwnd IntPtr, Int32 msg, IntPtr wParam, lParam IntPtr, Boolean & traitées) à MS. Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & géré) à MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) au système.Windows.Threading.ExceptionWrapper.InternalRealCall (rappel de délégué, arguments d'objet, boolean isSingleParameter) à System.Windows.Threading.ExceptionWrapper.TryCatchWhen (source d'objet, rappel de délégué, arguments d'objet, boolean isSingleParameter, délégué catchHandler) à System.Windows. Threading.Dispatcher.InvokeImpl (priorité DispatcherPriority, temporisation TimeSpan, procédé délégué, objet args, Boolean isSingleParameter) à MS.Win32.HwndSubclass.SubclassWndProc (hwnd IntPtr, Int32 msg, IntPtr wParam, lParam IntPtr) à MS.Win32.UnsafeNativeMethods .DispatchMessage (MSG & msg) à System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage (MSG & msg) à System.Windows.Threading.Dispatcher.PushFrameImpl (structure DispatcherFrame) à System.Windows.Application.RunInternal (fenêtre de fenêtre) à PaymentsUploader.App.Main() dans C: \ Utilisateurs \ mrobaszynski \ Desktop \ PU \ PaymentsUploader \ obj \ Release \ App.g.cs: ligne 0 à System.AppDomain._nExecuteAssembly (assemblage de montage, String [] args) à Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() à System.Threading.ExecutionContext.Run (ExecutionContext ExecutionContext, rappel, ContextCallback état Object) au système. Threading.ThreadHelper.ThreadStart() InnerException: System.NullReferenceException Message = "La référence d'objet n'est pas définie sur une instance d'un objet." Source = "Microsoft.Xrm.Client" StackTrace: à Microsoft.Xrm.Client.CrmConnection.GetConnectionStringFrom (String connectionStringName) InnerException:

Répondre

5

Non, l'autre poste est erroné - ne pas utiliser la réflexion. La méthode appropriée consiste à utiliser CrmConnection.Parse (customConnectionString) pour créer une connexion crm. Vous pouvez ensuite construire le contexte de données avec cette connexion dans le constructeur.

var crm = nouveau XrmDataContext (CrmConnection.Parse (customConnectionString));

Shan McArthur

www.shanmcarthur.net