zoukankan      html  css  js  c++  java
  • [AX]AX2012 AIF(八):系统服务之Metadata service

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

    在.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用户都可以访问元数据服务,并且所有安全角色看到的元数据信息都是一样的。

  • 相关阅读:
    怎么加载用户自定义控件
    一个C#委托的示例
    signed add
    避免QuartusII中将没有进行定义的信号自动生成wrie类型
    serial_to_parallel
    用modelsim仿真——对文件的操作
    base of logic
    blocking PK nonblocking
    parallel to serial
    使用signalTapII看综合掉的wrie和register的值
  • 原文地址:https://www.cnblogs.com/duanshuiliu/p/2932092.html
Copyright © 2011-2022 走看看