博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[AX]AX2012 AIF(八):系统服务之Metadata service
阅读量:7061 次
发布时间:2019-06-28

本文共 4886 字,大约阅读时间需要 16 分钟。

AX2012提供三种系统服务:Metadata service、Query service和User session service,它们都是随AOS安装自带的,宿主在AOS上,只能使用netTcpBinding端口绑定方式。这里讲讲Metadata service的使用,通过Metadata service,可以得到创建在AOT中元素的信息,比如表的字段信息、查询的Datasource信息等等,完整的元数据服务可用操作可用在这里查询:。

在.net工程中使用元数据服务很简单,首先需要添加元数据服务的Service引用,WSDL的URL为: http://servername:8101/DynamicsAx/Services/MetadataService。下面是一个获取AOT中Service节点信息的一个例子:

static void Main(string[] args)        {            AxMetadataServiceClient client = new AxMetadataServiceClient();            try            {                 // Gets the names of all services in a string array.                string[] services = client.GetServiceNames();                // Loops through all the service names and prints them to the console.                foreach (string serviceName in services)                {                    Console.WriteLine("Service named: {0}", serviceName);                }                // Gets the name of the first service.                string[] serviceNames = new string[1];                serviceNames[0] = services[0];                // Gets the metadata for the first service.                ServiceMetadata[] serviceMetadata = client.GetServiceMetadataByName(serviceNames);                client.Close();            }            catch            {                client.Abort();                throw;            }        }

在第二个例子中演示如何得到AOT Query的Datasource名称:

using System;using MetadataServiceTest.MetadataServiceReference;namespace MetadataServiceTest{    class Program    {        static void Main(string[] args)        {            AxMetadataServiceClient client = new AxMetadataServiceClient();            try            {                // Gets the names of all queries in a string array.                string[] queries = client.GetQueryNames();                // Loops through all the query names.                foreach (string queryName in queries)                {                    if (queryName == "AxdSalesOrder")                    {                        // Stores the name of the AxdSalesOrder query.                        string[] limitedNames = new string[1];                        limitedNames[0] = queryName;                        // Writes the name of the query to the console.                        Console.WriteLine("Query named: {0}", queryName);                        // Gets the metadata for the AxdSalesOrder query.                        QueryMetadata[] queryMetadata = client.GetQueryMetadataByName(limitedNames);                        // Creates a query metadata object.                        QueryMetadata querySalesOrder = queryMetadata[0];                        // Loops through thequery data sources and writes them to the console.                        foreach (QueryDataSourceMetadata queryDS in querySalesOrder.DataSources)                        {                            RecursivelyIterateDataSources(queryDS);                        }                        Console.ReadKey(true);                    }                }                client.Close();            }            catch            {                client.Abort();                throw;            }        }        static void RecursivelyIterateDataSources(QueryDataSourceMetadata parent)        {            Console.WriteLine("Query data source named: {0}", parent.Name.ToString());            // Loops through the query data sources and writes them to the console.            foreach (QueryDataSourceMetadata queryDS in parent.DataSources)            {                RecursivelyIterateDataSources(queryDS);            }        }    }}

在第三个例子中演示如何得到表字段的信息:

using System;using MetadataSvcGetFieldLabels.MetadataServiceReference;namespace MetadataSvcGetFieldLabels{    class Program    {        static void Main(string[] args)        {            AxMetadataServiceClient client = new AxMetadataServiceClient();            try            {                // The table ID of the SalesTable.                int[] tableIDs = new int[1];                tableIDs[0] = 366;                // Gets the table metadata.                TableMetadata[] tableMetadata = client.GetTableMetadataById(tableIDs);                TableMetadata salesTable = tableMetadata[0];                foreach (DataFieldMetadata fieldMetadata in salesTable.Fields)                {                    // Print the field name and the label for the field to the console.                    System.Console.WriteLine("Field named: {0}, Field label: {1}", fieldMetadata.Name,                            client.GetLabelMetadataForLanguageById("EN-US", new string[] { fieldMetadata.LabelId })[0].LabelString);                }                Console.ReadKey(true);                client.Close();            }            catch            {                client.Abort();                throw;            }        }     } }

使用元数据服务的用户必须是有效的AX用户,所有通过认证的AX用户都可以访问元数据服务,并且所有安全角色看到的元数据信息都是一样的。

 

转载地址:http://nffll.baihongyu.com/

你可能感兴趣的文章