Del via


Eksempel: Hurtig start af XRM-værktøjs-API'er

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Eksemplet QuickStart er et Microsoft .NET Framework-administreret kodeeksempel, der viser, hvordan du opretter forbindelse til en forekomst af Microsoft Dynamics 365 ved hjælp af XRM-værktøjets API'er og udfører grundlæggende oprettelses-, opdaterings-, hentnings- og sletningshandlinger på et objekt. Du kan finde flere oplysninger om XRM Tooling under Opbygge Windows-klientprogrammer ved hjælp af XRM-værktøjerne.

Krav

Denne eksempelkode er for Microsoft Dynamics 365 (online og i det lokale miljø). Hent SDK-pakken til Microsoft Dynamics CRM. Den findes på følgende placering i downloadpakken:

SDK\SampleCode\CS\XRMTooling

Demonstrerer

  • Eksempelkoden er opbygget ved hjælp af den SDK-skabelon for WPF-programmet til Dynamics 365, der leverer et fælles logonkontrolelement med indbygget understøttelse til cachelagring og genbrug af godkendelses- og legitimationsoplysninger. Du kan finde flere oplysninger om kontrolelementet til fælles logon, og hvordan du bruger SDK-skabelonen i Microsoft Visual Studio, under Brug XRM-værktøjet til fælles login-kontrolelement i dine klientprogrammer.

  • Der bruges ingen hjælperkode til at oprette forbindelse til Dynamics 365.

  • Når du har oprettet forbindelse til Dynamics 365, udfører eksemplet grundlæggende oprettelses-, opdaterings-, hentnings- og sletningshandlinger på et firmaobjekt.

  • Gemmer brugerens legitimationsoplysninger i en konfigurationsfil (Default_QuickStartXRMToolingWPFClient.exe.config) i mappen c:\Brugere\<brugernavn>\AppData\Roaming\Microsoft\QuickStartXRMToolingWPFClient, når eksemplet køres første gang, og beder derefter brugeren enten bruge de gemte eller angive nye legitimationsoplysninger på kørselstidspunktet for at logge på Dynamics 365.

  • Opretter følgende logfiler, hvis et problem opstår, for at støtte fejlfinding:

    • Login_ErrorLog.log: Til rapportering af logonfejl. Denne fil findes i C:\Brugere\<brugernavn>\AppData\Roaming\Microsoft\QuickStartXRMToolingWPFClient.

    • QuickStartXRMToolingWPFClient.log: Til rapportering af driftsfejl. Denne fil findes på den samme placering som den eksekverbare fil, dvs. i fejlfindingsmappen i dit Microsoft Visual Studio-projekt.

Sådan køres eksemplet

  1. Find og åbn mappen SDK\SampleCode\CS\XRMTooling.

  2. Åbn filen QuickStartXRMToolingWPFClient.sln i Visual Studio.

  3. Tryk på F5 for at kompilere og køre programmet.

Eksempel

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

// This namespace is automatically added for using 
// components in LoginWindow\CrmLogin.xaml (common login control).
using QuickStartXRMToolingWPFClient.LoginWindow;

// Add this namespace for performing 
// various operations in CRM.
using Microsoft.Xrm.Tooling.Connector;

namespace QuickStartXRMToolingWPFClient
{
    /// <summary>
    /// Demonstrates how to do basic entity operations like create, retrieve,
    /// update, and delete using the XRM Tooling APIs and the common login
    /// control.</summary>
    /// <remarks>
    /// At run-time, you will be given the option to delete all the
    /// database records created by this program.</remarks>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            btnDelete.Visibility = Visibility.Hidden;
        }

        #region Class Level Members

        private CrmLogin _ctrl = null;
        private Guid _accountId;

        #endregion Class Level Members

        #region How To Sample Code

        /// <summary>
        /// Connect to Microsoft CRM, and get an instance of CRMServiceClient 
        /// </summary>

        private void LoginButton_Click(object sender, RoutedEventArgs e)
        {
            // Create an instance of the XRM Tooling common login control
            _ctrl = new CrmLogin();

            /// Wire event to the CRM sign-in response. 
            _ctrl.ConnectionToCrmCompleted += ctrl_ConnectionToCrmCompleted;
            UpdateStatus("Initiating connection to CRM...");

            /// Show the XRM Tooling common login control. 
            _ctrl.ShowDialog();

            /// Validate if you are connected to CRM 
            if (_ctrl.CrmConnectionMgr != null && _ctrl.CrmConnectionMgr.CrmSvc != null && _ctrl.CrmConnectionMgr.CrmSvc.IsReady)
            {
                UpdateStatus("Connected to CRM! (Version: " + _ctrl.CrmConnectionMgr.CrmSvc.ConnectedOrgVersion.ToString() + 
                    "; Org: " + _ctrl.CrmConnectionMgr.CrmSvc.ConnectedOrgUniqueName.ToString() + ")");
                UpdateStatus("***************************************");
                UpdateStatus("Click Start to create, retrieve, update, and delete (optional) an account record.");
                btnSignIn.IsEnabled = false;
                btnCRUD.IsEnabled = true;
            }
            // If you are not connected to CRM; display the last error and last CRM excption
            else
            {
                UpdateStatus("The connection to CRM failed or was cancelled by the user.");            
            }            
        }

        private void btnCRUD_Click(object sender, RoutedEventArgs e)
        {
            // Create an account record
            Dictionary<string, CrmDataTypeWrapper> inData = new Dictionary<string, CrmDataTypeWrapper>();
            inData.Add("name", new CrmDataTypeWrapper("Sample Account Name", CrmFieldType.String));
            inData.Add("address1_city", new CrmDataTypeWrapper("Redmond", CrmFieldType.String));
            inData.Add("telephone1", new CrmDataTypeWrapper("555-0160", CrmFieldType.String));
            _accountId = _ctrl.CrmConnectionMgr.CrmSvc.CreateNewRecord("account", inData);

            // Validate if the account is created, and then retrieve it
            if (_accountId != Guid.Empty)
            {
                UpdateStatus("***************************************");
                UpdateStatus(DateTime.Now.ToString() + ": Created an account with the following" + "\n" + "details, and retrieved it:");
                Dictionary<string, object> data = _ctrl.CrmConnectionMgr.CrmSvc.GetEntityDataById("account", _accountId, null);
                foreach (var pair in data)
                {
                    if ((pair.Key == "name") || (pair.Key == "address1_city") || (pair.Key == "telephone1"))
                    {
                        UpdateStatus(pair.Key.ToUpper() + ": " + pair.Value);
                    }
                }
                btnCRUD.IsEnabled = false;
            }
            else
            {
                UpdateStatus("***************************************");
                UpdateStatus("Could not create the account.");
            }


            // Update the account record
            Dictionary<string, CrmDataTypeWrapper> updateData = new Dictionary<string, CrmDataTypeWrapper>();
            updateData.Add("name", new CrmDataTypeWrapper("Updated Sample Account Name", CrmFieldType.String));
            updateData.Add("address1_city", new CrmDataTypeWrapper("Boston", CrmFieldType.String));
            updateData.Add("telephone1", new CrmDataTypeWrapper("555-0161", CrmFieldType.String)); 
            bool updateAccountStatus = _ctrl.CrmConnectionMgr.CrmSvc.UpdateEntity("account","accountid",_accountId,updateData);

            // Validate if the the account record was updated successfully, and then display the updated information
            if (updateAccountStatus == true)
            {
                UpdateStatus("***************************************");
                UpdateStatus(DateTime.Now.ToString() + ": Updated the account details as follows:");
                Dictionary<string, object> data = _ctrl.CrmConnectionMgr.CrmSvc.GetEntityDataById("account", _accountId, null);
                foreach (var pair in data)
                {
                    if ((pair.Key == "name") || (pair.Key == "address1_city") || (pair.Key == "telephone1"))
                    {
                        UpdateStatus(pair.Key.ToUpper() + ": " + pair.Value);
                    }
                }
            }
            else
            {
                UpdateStatus("***************************************");
                UpdateStatus("Could not update the account.");
            }

            // Prompt the user to delete the account record created in the sample
            UpdateStatus("***************************************");
            UpdateStatus("To delete the account record created by the sample, click Delete Record.");
            UpdateStatus("Otherwise, click Exit to close the sample application.");
            btnDelete.Visibility = Visibility.Visible;        
        }

        // Delete the account record created in this sample.
        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            btnDelete.IsEnabled = false;
            _ctrl.CrmConnectionMgr.CrmSvc.DeleteEntity("account", _accountId);
            UpdateStatus("***************************************");
            UpdateStatus(DateTime.Now.ToString() + ": Deleted the account record.");
            UpdateStatus("Click Exit to close the sample application.");
        }

        // Exit the sample application
        private void btnExit_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// Progressively displays the status messages about the actions
        /// performed during the running of the sample.
        /// <param name="updateText">Indicates the status string that needs to be 
        /// displayed to the user.</param>
        /// </summary>
        public void UpdateStatus(string updateText)
        {
            if (lblStatus.Content.ToString() != String.Empty)
            {
                lblStatus.Content = lblStatus.Content + "\n" + updateText;
            }
            else
            {
                lblStatus.Content = updateText;
            }
        }

        /// <summary>
        /// Raised when the login process is completed.
        /// </summary>
        private void ctrl_ConnectionToCrmCompleted(object sender, EventArgs e)
        {
            if (sender is CrmLogin)
            {
                this.Dispatcher.Invoke(() =>
                {
                    ((CrmLogin)sender).Close();
                });
            }
        }
    }
    #endregion How To Sample Code

}

Se også

Brug XRM-værktøjet til fælles login-kontrolelement i dine klientprogrammer
Opbygge Windows-klientprogrammer ved hjælp af XRM-værktøjerne
Selvstudier og ressourcer om udvikling for Microsoft Dynamics 365

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret