文章目录
- 1. IOrganization Interface
- 1.1 基本介绍
- 1.2 方法分析
- 2. Entity对象
- 2.1 Constructor
- 2.2 Properties
- 2.3 Methods
- 3. 相关方法
- 3.1 单行查询 Retrive
- 3.2 多行查询 RetriveMultiple
- 3.3 增加 Create
- 3.4 删除 Delete
- 3.5 修改 Update
- 4. 数据查询的不同实现方式
- 4.1 QueryExpression
- 4.2 QueryByAttribute
- 4.3 FetchExpression
- 4.4 LINQ
1. IOrganization Interface
1.1 基本介绍
- IOrganization 是用于向组织提供元数据以及数据的编程访问的接口. (Dataverse的增删改查以及表联系的相关操作)
//ServiceClient、CrmServiceClient 都可实现 IOrganizationService接口
IOrganizationService service = new CrmServiceClient(connectionString);
IOrganizationService service = new ServiceClient(connectionString);
using Microsoft.Crm.Sdk.Messages;
using Microsoft.PowerPlatform.Dataverse.Client;
using Microsoft.Xrm.Sdk;class Program
{// Dataverse环境URL以及登录信息static string url = "https://yourorg.crm.dynamics.com";static string userName = "you@yourorg.onmicrosoft.com";static string password = "yourPassword";// 连接上述代码串进行测试static string connectionString = $@"AuthType = OAuth;Url = {url};UserName = {userName};Password = {password};AppId = 51f81489-12ee-4a9e-aaae-a2591f45987d;RedirectUri = http://localhost;LoginPrompt=Auto;RequireNewInstance = True";static void Main(){// 获取IorganizationService的接口实例IOrganizationService service = new ServiceClient(connectionString);var response = (WhoAmIResponse)service.Execute(new WhoAmIRequest());Console.WriteLine($"User ID is {response.UserId}.");// Pause the console so it does not close.Console.WriteLine("Press the <Enter> key to exit.");Console.ReadLine();}
}
参考文献. c#连接Microsoft Dataver:c#连接 MicroSoft Dataverse
1.2 方法分析
参考文献. IOrganization:IOrganizationService 接口
2. Entity对象
2.1 Constructor
在这里插入代码片
2.2 Properties
在这里插入代码片
2.3 Methods
在这里插入代码片
参考文献. Entity对象:Entity对象
3. 相关方法
3.1 单行查询 Retrive
a. 代码及使用
//public Microsoft::Xrm::Sdk::Entity ^ Retrieve(System::String ^ entityName, Guid id, Microsoft::Xrm::Sdk::Query::ColumnSet ^ columnSet);
static void Retrive(IOrganizationService service){string entityName = "crda9_room"; // 逻辑名称ColumnSet columnSet = new ColumnSet("crda9_name", "crda9_type", "crda9_site"); // 查询的属性Guid guid = new Guid("4e4c81a1-439d-ee11-be37-000d3a85d073"); // 全局唯一标识符Entity entity = service.Retrieve(entityName, guid, columnSet); // 发起查询Console.WriteLine($"name:{entity.GetAttributeValue<string>("crda9_name")}"+ " " + $"type:{entity.GetAttributeValue<OptionSetValue>("crda9_type").Value}"+ " " + $"site:{entity.GetAttributeValue<string>("crda9_site")}");
}
3.2 多行查询 RetriveMultiple
a. 代码及使用
// Microsoft::Xrm::Sdk::EntityCollection ^ RetrieveMultiple(Microsoft::Xrm::Sdk::Query::QueryBase ^ query);
static void RetriveMultiple(IOrganizationService service){QueryExpression query = new("crda9_room") { }; // 表逻辑名称EntityCollection results = service.RetrieveMultiple(query); // 查询发送foreach (Entity entity in results.Entities){Console.WriteLine($"Id:{entity.Id}"); // 全局唯一标识符(每行数据有一个Id)Console.WriteLine($"name:{entity.Attributes["crda9_name"]}");}
}
b. QueryExpression 总结
public ref class QueryExpression sealed : Microsoft::Xrm::Sdk::Query::QueryBase
query.EntityName = "crda9_room"; // 1.EntityName --> 表逻辑名(可在构造函数时直接构造)
query.ColumnSet.AddColumns("crda9_name"); // 2.ColumnSet --> 负责查询列数
query.Criteria.AddCondition("crda9_type", ConditionOperator.Equal, 0); // 3.Criteria --> 查询限定条件
query.AddOrder("crda9_name", OrderType.Ascending); // 4. AddOrder --> 列排序
query.TopCount = 2; // 5. TopCount --> 控制显示的行数(与PageInfo不能同时使用)
query.PageInfo = new PagingInfo() { // 6. PageInfor --> 控制分页PageNumber = 1, // 页数Count = 2 // 每页数量
};
3.3 增加 Create
a. 代码及使用
// Guid Create(Microsoft::Xrm::Sdk::Entity ^ entity);
static void CreateExpressionExample(IOrganizationService service)
{Entity entity = new Entity("crda9_student");entity["crda9_name"] = "新学生_张雪雪";entity["crda9_age"] = 17;Guid id = service.Create(entity); Console.WriteLine("新学生的唯一id为:" + id);
}
3.4 删除 Delete
a. 代码及使用
// void Delete(System::String ^ entityName, Guid id);
static void DeleteExpressionExample(IOrganizationService service)
{string entityName = "crda9_student"; // 逻辑名称Guid guid = new Guid("e334ba87-4c9a-ee11-be37-000d3a85d073"); // 全局唯一标识符service.Delete(entityName, guid);
}
3.5 修改 Update
a. 代码及使用
// void Update(Microsoft::Xrm::Sdk::Entity ^ entity);static void UpdateExpressionExample(IOrganizationService service){Guid id = CreateExpressionExample(service); // 先调用函数创建一个新学生,返回其Id唯一标识Entity entity = new Entity("crda9_student");entity.Id = id;entity["crda9_name"] = "更新后的学生";service.Update(entity);Console.WriteLine("successful update....");}
’
4. 数据查询的不同实现方式
QueryBase的实现类
参考文献. QueryBase抽象类接口:QueryBase抽象类接口
4.1 QueryExpression
QueryExpression类 – 属性
- QueryExpression 是较为常用的数据查询类,支持列查询、条件判断、实体联系、排序等操作,
- 示例代码见相关方法当中多行查询
4.2 QueryByAttribute
QueryByAttribute类 – 属性
- 感觉功能可以由QueryByExpression代替,感觉这个可能更加侧重通过属性来查找判断,
static void QueryByAttributeTest(IOrganizationService service){QueryByAttribute query = new QueryByAttribute("crda9_room") {ColumnSet = new ColumnSet("crda9_name", "crda9_site"),};query.AddAttributeValue("crda9_site", "武汉"); // 此行必须实现(查找满足条件的数据)EntityCollection results = service.RetrieveMultiple(query);foreach (Entity entity in results.Entities){Console.WriteLine($"name:{entity.Attributes["crda9_name"]}");Console.WriteLine($"site:{entity.Attributes["crda9_site"]}");}}
4.3 FetchExpression
FetchExpression类
- 通过使用Fetch Xml语句拼接完成属性的查询以及过滤判断等相关操作.
- Dynamic 365 -> 高级查找 -> Fetch XML 使用
- 补充字符串使用
a. @ 防止转义字符串, 可以省略使用/转义的操作, 单引号需要使用双引号转义. 可多行换行, 会将每行前面空格算入内
b. $ 插值字符串, 可使用{}插入数据值, 方法类似与代替string.format(“{0}”, 数据值). 不可多行换行
c. “”“”“” 多行字符串. 可多行换行,其每行最前列以第二个"""的那一列作为标准.
static void QueryByFetch(IOrganizationService service){string fetchXml = $@"<fetch version=""1.0"" output-format=""xml-platform"" mapping=""logical"" distinct=""false""><entity name=""crda9_room""><attribute name=""crda9_name"" /><attribute name=""crda9_type"" /><attribute name=""crda9_site"" /><attribute name=""crda9_detail"" /><filter type=""and""><condition attribute=""crda9_name"" operator=""like"" value=""%北京%"" /></filter></entity></fetch>";FetchExpression query = new FetchExpression(fetchXml);EntityCollection results = service.RetrieveMultiple(query);foreach (Entity entity in results.Entities){Console.WriteLine($"name:{entity.Attributes["crda9_name"]}");Console.WriteLine($"site:{entity.Attributes["crda9_site"]}");}
}
foreach (Entity entity in results.Entities){Console.WriteLine($""" name: {entity["crda9_name"]}type: {entity.GetAttributeValue<OptionSetValue>("crda9_type")?.Value} // 防止为Nullsite: {entity.GetAttributeValue<OptionSetValue>("crda9_site")?.Value} // 防止为Null""");
}
4.4 LINQ
- LINQ 最明显的“语言集成”部分就是查询表达式。 查询表达式采用声明性查询语法编写而成。 使用查询语法,可以用最少的代码对数据源执行筛选、排序和分组操作。