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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值