Delen via


Gebruik in bewerkbare rasters Dynamics 365

 

Gepubliceerd: januari 2017

Is van toepassing op: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Het bewerkbare raster is een nieuw, aangepast besturingselement in Microsoft Dynamics 365, dat uitgebreide mogelijkheden voor inline bewerken biedt in webclients en mobiele clients (Dynamics 365 voor telefoons en Dynamics 365 voor tablets). Dit omvat onder meer de mogelijkheid om gegevens binnen hetzelfde raster te groeperen, sorteren en filteren, zodat u niet heen-en-weer hoeft te schakelen tussen records of weergaven. Het besturingselement bewerkbaar raster wordt ondersteund in het hoofdraster een formulier in de webclient en in dashboards en formulierrasters in mobiele clients. Hoewel de het besturingselement de mogelijkheid tot bewerken van gegevens biedt, worden hierin de alleen-lezen metagegevens in rasters en de beveiligingsinstellingen op veldniveau gehandhaafd. Bewerkbare rasters bieden ook ondersteuning voor bedrijfsregels en formulierscripts, zodat u de aangepaste bedrijfslogica van uw eigen organisatie kunt toepassen.

Notitie

Het bewerkbare raster is geïntroduceerd in Update voor Dynamics 365 (online en on-premises) - december 2016.

In dit onderwerp

Bewerkbare rasters inschakelen

Ondersteuning voor formulierscripts

Entiteiten en weergaven die door het raster worden ondersteund

Bewerkbare rasters inschakelen

U kunt bewerkbare rasters inschakelen op entiteitniveau voor gebruik in het hoofdraster, of op formulierniveau om alleen-lezen subrasters (gekoppelde rasters) te vervangen door een bewerkbaar raster.

U kunt het besturingselement bewerkbare rasters inschakelen voor een entiteit met het aanpassinghulpprogramma in Dynamics 365 (Instellingen > Aanpassingen > Het systeem aanpassen > Entiteiten > [Entiteitsnaam] > tabblad Besturingselementen).

Om het bewerkbare raster in te schakelen voor een raster in een formulier, opent u de formuliereditor en dubbelklikt u op het alleen-lezen raster dat u wilt vervangen door het bewerkbare raster. Vervolgens gaat u naar het tabblad Besturingselementen en voegt u het bewerkbare raster toe of schakelt u het in.

Indien gewenst kunt u op elk moment weer teruggaan naar het niet-bewerkbare raster voor het hoofdraster en gekoppelde rasters. Bij het uitvoeren kunnen gebruikers ook schakelen tussen bewerkbare rasters en alleen-lezen rasters.

Meer informatie:TechNet: Rasters maken (lijsten) in Dynamics 365 met het aangepaste besturingselement Bewerkbaar raster

Ondersteuning voor formulierscripts

De bewerkbare rasters ondersteunen gebeurtenissen en methoden in de client, waarmee u aangepaste client-uitbreidingen kunt schrijven die zijn afgestemd op uw zakelijke behoeften.Meer informatie:Bewerkbare rasterobjecten en -methoden (clientreferentie)

Entiteiten en weergaven die door het raster worden ondersteund

Niet alle entiteiten en weergaven ondersteunen het gebruik van het bewerkbare raster.

In de webclient ondersteunt een entiteit het bewerkbare raster als aan alle volgende voorwaarden wordt voldaan:

  • De entiteit is aanpasbaar (IsCustomizable = true)

  • De entiteit wordt vernieuwd (IsAIRUpdated = waar) of is een aangepaste entiteit (IsCustomEntity = true)

  • De entiteit is geen onderliggende entiteit (IsChildEntity = false)

Voor de mobiele client van Dynamics 365 ondersteunt een entiteit het bewerkbare raster als de entiteit in het siteoverzicht van de mobiele client kan worden weergegeven.

Voor informatie over de entiteiten die bewerkbare rasters ondersteunen, raadpleegt u de sectie Ondersteunde kant-en-klare entiteiten in TechNet: Rasters maken (lijsten) in Dynamics 365 met het aangepaste besturingselement Bewerkbaar raster

Bewerkbare rasters ondersteunen geen gekoppelde aggregatieweergaven (Rollup-type = Related).

Met de volgende voorbeeldcode kunt u een XML-bestand genereren dat u in Microsoft Excel als een XML-tabel kunt openen, om de informatie betreffende entiteitsondersteuning voor bewerkbare besturingselementen weer te geven.Excel berekent automatisch het schema, en geeft de informatie weer onder de volgende kolommen:

  • LogicalName: Logische naam van entiteit

  • DisplayName: Weergavenaam van entiteit

  • CanEnableEditableGridWeb: Toont de status (true of false) van ondersteuning van bewerkbare rasters voor de entiteit in de webclient.

  • CanEnableEditableGridMobile: Toont de status (true of false) van ondersteuning van bewerkbare rasters voor de entiteit in mobiele clients. (Dynamics 365 voor telefoons en Dynamics 365 voor 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

    }
}

Zie ook

Bewerkbare rasterobjecten en -methoden (clientreferentie)
TechNet: Rasters maken (lijsten) in Dynamics 365 met het aangepaste besturingselement Bewerkbaar raster

Microsoft Dynamics 365

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht