Del via


Brug redigerbare gitre i Dynamics 365

 

Udgivet: januar 2017

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

Det redigerbare gitter er et nyt brugerdefineret kontrolelement i Microsoft Dynamics 365, der indeholder omfattende indbyggede redigeringsfunktioner på web- og mobilklienter (Dynamics 365 til telefoner og Dynamics 365 til tablets), herunder mulighed for at gruppere, sortere og filtrere data i det samme gitter, så du ikke behøver at skifte poster eller visninger. Det redigerbare gitter-kontrolelement understøttes i hovedgitteret og undergitre i en formular på webklienten og i dashboards og i formulargitre på mobilklienter. Selvom det redigerbare gitter-kontrolelement giver mulighed for redigering, tager det hensyn til de skrivebeskyttede gittermetadata og sikkerhedsindstillingerne på feltniveau. Redigerbare gitre understøtter også forretningsregler og formularscripts, så du kan anvende brugerdefineret forretningslogik i henhold til virksomhedens behov.

Bemærk

Det redigerbare gitter blev introduceret i December 2016 – opdatering til Dynamics 365 (online og det lokale miljø).

Dette emne indeholder

Aktivér redigerbare gitre

Understøttelse af formularscripts

Objekter og visninger, der understøttes af det redigerbare gitter

Aktivér redigerbare gitre

Du kan aktivere redigerbare gitre på objektniveau for at bruge dem i hovedgitteret eller på formularniveau for at erstatte skrivebeskyttede undergitre (tilknyttet gitre) med et redigerbart gitter.

Du kan aktivere det redigerbare gitter-kontrolelement for et objekt ved hjælp af tilpasningsværktøjet i Dynamics 365 (Indstillinger > Tilpasninger > Tilpas systemet > Objekter > [Navn_på_objekt] > fanen Kontrolelementer.

For at aktivere det redigerbare gitter til et gitter i en formular skal du åbne formulareditoren, dobbeltklikke på det skrivebeskyttede gitter, som du vil erstatte med det redigerbare gitter, og derefter tilføje/aktivere det redigerbare gitter under fanen Kontrolelementer.

Du kan altid vende tilbage det ikke-redigerbare gitter, hvad angår hovedgitteret og tilknyttede gitre, hvis det er nødvendigt. Og under kørsel kan brugere skifte mellem redigerbare gitre og skrivebeskyttede gitre.

Flere oplysninger:TechNet: Gør gitre (lister) redigerbare i Dynamics 365 ved hjælp af det brugerdefinerede kontrolelement Redigerbart gitter

Understøttelse af formularscripts

Redigerbare gitre understøtter hændelser på klientsiden og metoder, der kan bruges til at skrive brugerdefinerede klientudvidelser i henhold til dine forretningsbehov.Flere oplysninger:Redigerbare gitterobjekter og -metoder (klientsidereference)

Objekter og visninger, der understøttes af det redigerbare gitter

Ikke alle objekter og visninger understøtter brugen af det redigerbare gitter.

På webklienten understøtter et objekt det redigerbare gitter, hvis alle følgende betingelser er sande:

  • Objektet kan tilpasses (IsCustomizable = true)

  • Objektet er enten opdateret (IsAIRUpdated = true) eller et brugerdefineret objekt (IsCustomEntity = true)

  • Objektet er ikke et underordnet objekt (IsChildEntity = false)

På Dynamics 365-mobilklienten skal et objekt understøtte det redigerbare gitter, hvis objektet kan vises i mobilklientens oversigt over websted.

Find oplysninger om de enheder, der understøtter redigerbare gitre, i afsnittet Understøttede standardobjekter i TechNet: Gør gitre (lister) redigerbare i Dynamics 365 ved hjælp af det brugerdefinerede kontrolelement Redigerbart gitter

Redigerbare gitre understøtter ikke akkumulere tilknyttede visninger (akkumuleringstype = Related).

Du kan bruge følgende eksempelkode til at generere en XML-fil, som du kan åbne i Microsoft Excel som en XML-tabel for at få vist objektsupportoplysningerne for redigerbare kontrolelementer.Excel vil automatisk finde ud af skemaet og viser oplysninger under følgende kolonner:

  • LogicalName: Objektets logiske navn.

  • DisplayName: Objektets viste navn.

  • CanEnableEditableGridWeb: Viser status (sand eller falsk) for, om det redigerbare gitter understøttes for objektet på webklienten.

  • CanEnableEditableGridMobile: Viser status (sand eller falsk) for, om det redigerbare gitter understøttes for objektet på mobilklienter. (Dynamics 365 til telefoner og Dynamics 365 til tablets).

using System;
using System.Linq;
using System.Xml.Linq;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Xml;
using System.IO;

// These namespaces are found in the Microsoft.Xrm.Sdk.dll assembly
// found in the SDK\bin folder.
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Metadata;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Messages;

// This namespace is found in Microsoft.Crm.Sdk.Proxy.dll assembly
// found in the SDK\bin folder.
using Microsoft.Crm.Sdk.Messages;

namespace Microsoft.Crm.Sdk.Samples
{
    /// <summary>
    /// This sample generates an XML table to display the entity-support information for 
    ///  editable controls.
    /// </summary>
    public class DumpEditableGridEntityInfo
    {
        #region Class Level Members

        /// <summary>
        /// Stores the organization service proxy.
        /// </summary>
        OrganizationServiceProxy _serviceProxy;

        // Create storage for new attributes being created
        public List<AttributeMetadata> addedAttributes;

        // Specify which language code to use in the sample. If you are using a language
        // other than US English, you will need to modify this value accordingly.
        // See https://msdn.microsoft.com/en-us/library/0h88fahh.aspx
        public const int _languageCode = 1033;

        // Define the IDs/variables needed for this sample.
        public int _insertedStatusValue;

        #endregion Class Level Members

        #region How To Sample Code
        /// <summary>
        /// </summary>
        /// <param name="serverConfig">Contains server connection information.</param>
        /// <param name="promptForDelete">When True, the user will be prompted to delete all
        /// created entities.</param>
        public void Run(ServerConnection.Configuration serverConfig, bool promptForDelete)
        {
            try
            {

                // Connect to the Organization service. 
                // The using statement assures that the service proxy will be properly disposed.
                using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri, serverConfig.Credentials, serverConfig.DeviceCredentials))
                {
                    // This statement is required to enable early-bound type support.
                    _serviceProxy.EnableProxyTypes();

                    //<snippetDumpEditableGridEntityInfo1>
                    RetrieveAllEntitiesRequest request = new RetrieveAllEntitiesRequest()
                    {
                        EntityFilters = EntityFilters.Entity,
                        RetrieveAsIfPublished = true
                    };

                    // Retrieve the MetaData.
                    RetrieveAllEntitiesResponse response = (RetrieveAllEntitiesResponse)_serviceProxy.Execute(request);


                    // Create an instance of StreamWriter to write text to a file.
                    // The using statement also closes the StreamWriter.
                    // To view this file, right click the file and choose open with Excel. 
                    // Excel will figure out the schema and display the information in columns.

                    String filename = String.Concat("EditableGridEntityInfo.xml");
                    using (StreamWriter sw = new StreamWriter(filename))
                    {
                        // Create Xml Writer.
                        XmlTextWriter metadataWriter = new XmlTextWriter(sw);

                        // Start Xml File.
                        metadataWriter.WriteStartDocument();

                        // Metadata Xml Node.
                        metadataWriter.WriteStartElement("Metadata");

                        foreach (EntityMetadata currentEntity in response.EntityMetadata)
                        {
                            // Start Entity Node
                            metadataWriter.WriteStartElement("Entity");

                            bool canBeDisplayedInSitemap = currentEntity.IsCustomizable.Value;

                            if (canBeDisplayedInSitemap)
                            {
                                metadataWriter.WriteElementString("LogicalName", currentEntity.LogicalName);
                                metadataWriter.WriteElementString("DisplayName", currentEntity.DisplayName.UserLocalizedLabel?.Label);
                                metadataWriter.WriteElementString("CanEnableEditableGridWeb", (!(bool)currentEntity.IsChildEntity && ((bool)currentEntity.IsAIRUpdated || (bool)currentEntity.IsCustomEntity)).ToString());
                                metadataWriter.WriteElementString("CanEnableEditableGridMobile", (currentEntity.IsVisibleInMobileClient.Value || currentEntity.IsVisibleInMobileClient.CanBeChanged).ToString());
                            }

                            // Write the Entity's Information.

                            //End Entity Node
                            metadataWriter.WriteEndElement();
                        }

                        // End Metadata Xml Node
                        metadataWriter.WriteEndElement();
                        metadataWriter.WriteEndDocument();

                        // Close xml writer.
                        metadataWriter.Close();
                        Console.WriteLine("Dumped information in the EditableGridEntityInfo.xml file");
                    }
                }
            }

            // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
            {
                // You can handle an exception here or pass it back to the calling method.
                throw;
            }
        }
        #endregion How To Sample Code

        #region Main
        /// <summary>
        /// Standard Main() method used by most SDK samples.
        /// </summary>
        /// <param name="args"></param>
        static public void Main(string[] args)
        {
            try
            {
                // Obtain the target organization's Web address and client logon 
                // credentials from the user.
                ServerConnection serverConnect = new ServerConnection();
                ServerConnection.Configuration config = serverConnect.GetServerConfiguration();
                DumpEditableGridEntityInfo app = new DumpEditableGridEntityInfo();
                app.Run(config, false);                
            }
            catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> ex)
            {
                Console.WriteLine("The application terminated with an error.");
                Console.WriteLine("Timestamp: {0}", ex.Detail.Timestamp);
                Console.WriteLine("Code: {0}", ex.Detail.ErrorCode);
                Console.WriteLine("Message: {0}", ex.Detail.Message);
                Console.WriteLine("Plugin Trace: {0}", ex.Detail.TraceText);
                Console.WriteLine("Inner Fault: {0}",
                    null == ex.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
            }
            catch (System.TimeoutException ex)
            {
                Console.WriteLine("The application terminated with an error.");
                Console.WriteLine("Message: {0}", ex.Message);
                Console.WriteLine("Stack Trace: {0}", ex.StackTrace);
                Console.WriteLine("Inner Fault: {0}",
                    null == ex.InnerException.Message ? "No Inner Fault" : ex.InnerException.Message);
            }
            catch (System.Exception ex)
            {
                Console.WriteLine("The application terminated with an error.");
                Console.WriteLine(ex.Message);

                // Display the details of the inner exception.
                if (ex.InnerException != null)
                {
                    Console.WriteLine(ex.InnerException.Message);

                    FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault> fe
                        = ex.InnerException
                        as FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>;
                    if (fe != null)
                    {
                        Console.WriteLine("Timestamp: {0}", fe.Detail.Timestamp);
                        Console.WriteLine("Code: {0}", fe.Detail.ErrorCode);
                        Console.WriteLine("Message: {0}", fe.Detail.Message);
                        Console.WriteLine("Plugin Trace: {0}", fe.Detail.TraceText);
                        Console.WriteLine("Inner Fault: {0}",
                            null == fe.Detail.InnerFault ? "No Inner Fault" : "Has Inner Fault");
                    }
                }
            }
            // Additional exceptions to catch: SecurityTokenValidationException, ExpiredSecurityTokenException,
            // SecurityAccessDeniedException, MessageSecurityException, and SecurityNegotiationException.

            finally
            {

                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }

        }
        #endregion Main

    }
}

Se også

Redigerbare gitterobjekter og -metoder (klientsidereference)
TechNet: Gør gitre (lister) redigerbare i Dynamics 365 ved hjælp af det brugerdefinerede kontrolelement Redigerbart gitter

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret