Power Apps 学习笔记 - IOrganizationService Interface

文章目录

    • 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.3 FetchExpression

1. IOrganization Interface

1.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类 – 属性
在这里插入图片描述

  1. QueryExpression 是较为常用的数据查询类,支持列查询、条件判断、实体联系、排序等操作,
  2. 示例代码见相关方法当中多行查询

4.2 QueryByAttribute

  QueryByAttribute类 – 属性
在这里插入图片描述

  1. 感觉功能可以由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类
在这里插入图片描述

  1. 通过使用Fetch Xml语句拼接完成属性的查询以及过滤判断等相关操作.
  2. Dynamic 365 -> 高级查找 查找Fetch XML 使用
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 record in results.Entities)
{
    Console.WriteLine($""" 
    
            name: {record["school_name"]}
            email: {record.GetAttributeValue<string>("school_email")}
            mobilenumber: {record.GetAttributeValue<string>("school_mobilenumber")}
            gender: {record.GetAttributeValue<OptionSetValue>("school_gender")?.Value}
            state: {record.GetAttributeValue<OptionSetValue>("statecode")?.Value}
            
            """);
}

在这里插入图片描述

4.3 FetchExpression

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vite+Vue3学习笔记(3)——界面设计

1 Element-plus 这是一个基于Vue3的组件库&#xff0c;能够快速构建界面样式。 官网链接&#xff1a; https://element-plus.gitee.io/zh-CN/guide/design.html 1.1 基础组件 1.1.1 安装 项目中的终端输入&#xff1a; npm install --save element-plus 1.1.2 引用 1.1.2.1…

RAG LLM App开发实战

大型语言模型&#xff08;LLM&#xff09;无疑改变了我们与信息交互的方式。 然而&#xff0c;对于我们可以向他们提出的要求&#xff0c;它们也有相当多的限制。 LLM&#xff08;例如 Llama-2-70b、gpt-4 等&#xff09;仅了解他们接受过训练的信息&#xff0c;当我们要求他们…

Python爬虫---selenium基本使用(支持无界面浏览器PhantomJS和Chrome handless)

为什么使用selenium&#xff1f; 使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium (1) selenium是一个用于web应用程序测试的工具 (2) selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样 (3) 支持通过各种driver (FirfoxDri…

手机摄影学习

手机摄影学习 手机摄影前期知识1&#xff0c;成像基本原理2&#xff0c;什么是焦距3&#xff0c;快门&#xff08;简称s&#xff09;4&#xff0c;上面功能之间的相互影响5&#xff0c;焦点6&#xff0c;过爆、欠曝7&#xff0c;cmos&#xff08;感光芯片&#xff09;、测光、聚…

【web】vue 播放后端(flask)发送的 mp3 文件

文章目录 演示后端&#xff08;flask&#xff09;前端&#xff08;vue3&#xff09;重要说明 演示 后端&#xff08;flask&#xff09; 后端返回的是 mp3 文件的 url&#xff0c;是可以直接在浏览器上打开后播放的处理跨域请求pip install flask-cors后端代码from flask impor…

骑砍战团MOD开发(30)-游戏大地图map.txt

骑砍1战团mod开发-大地图制作方法_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1rz4y1c7wH/ 一.骑砍游戏大地图 骑砍RTS视角游戏大地图 大地图静态模型(map.txt) 军团/城镇图标(module_parties.py). 骑砍大地图的战争迷雾和天气通过API进行管理和控制: # Weather-h…

Selenium框架添加CONNECT以抓取https网站

Selenium框架 Selenium是一个用于Web应用程序测试的强大工具&#xff0c;它提供了一系列的API&#xff0c;可以模拟用户在浏览器中的操作&#xff0c;包括点击、填写表单、导航等。在进行网络提取数据时&#xff0c;https网站的数据提取一直是一个技术难点。Selenium作为一个自…

git 如何撤销历史某次merge

git&#xff0c;如何 撤销某一次历史提交或merge&#xff0c;并保留该版本的后续提交&#xff1f; 场景1&#xff1a; 你有两个功能迭代版本的分支&#xff0c;一个是 15 号上线&#xff0c;一个是25号上线。5号的时候产品突然说&#xff0c;这两个版本一起上&#xff0c;然后…

[Flutter]Json和序列化数据

为较小的项目使用手动序列化数据 手动 JSON 解码是指在 dart:convert 中使用内置的 JSON 解码器。它包括将原始 JSON 字符串传递给 jsonDecode() 方法&#xff0c;然后在产生的 Map<String, dynamic> 计算结果中寻找你需要的值。它没有外部依赖或者特定的设置过程&#…

【数据库原理】(1)数据库技术的发展

数据与信息 数据&#xff1a;数据并非只是数字&#xff0c;像文字、符号、图像、影音等都属于数据的范畴。但一般会用数字来表述客观事物的数量、质量、关系等&#xff0c;便于更加直观的看待问题。 语义&#xff1a;数据还需要结合关联的语义解释才能够清晰的描述事物&#…

【CANopen】关于STM32的CanFestival移植

系列文章目录 文章目录 系列文章目录一、准备工作二、源码移植1、新建CubeMX工程2、移植CanFestival源码3、去除源码中的多余项4、源码修改 三、底层驱动适配四、字典工具1、字典的使用 使用STM32F407单片机 一、准备工作 CanFestival下载 二、源码移植 1、新建CubeMX工程 …

gorm.PrepareStmt模式使用不当问题查询

一、背景 xx服务内存持续上涨。内存占用10%以内&#xff0c;在QPS无明显变化的前提下&#xff0c;内存占用50%左右。 dump了一下heap内存&#xff0c;发现主要是 InitUserCacheRefresh 任务代码占用 正常来说&#xff0c;dao层查完数据库之后&#xff0c;对象应该会释放&…

设计模式:简单工厂模式、工厂方法模式、抽象工厂模式

简单工厂模式、工厂方法模式、抽象工厂模式 1. 为什么需要工厂模式&#xff1f;2. 简单工厂模式2.1. 定义2.2. 代码实现2.3. 优点2.4. 缺点2.5. 适用场景 3. 工厂方法模式3.1. 有了简单工厂模式为什么还需要有工厂方法模式&#xff1f;3.2. 定义3.3. 代码实现3.4. 主要优点3.5.…

Python怎么修改进程名称

目录 一、进程名称的概念 二、Python修改进程名称的方法 三、代码示例与使用说明 四、注意事项 五、适用场景 六、总结 Python是一种强大的编程语言&#xff0c;广泛应用于各种应用程序的开发。在Python中&#xff0c;修改进程名称可以通过多种方式实现。下面我们将深入探…

红队打靶练习:SAR: 1

目录 信息收集 1、arp 2、netdiscover 3、nmap 4、nikto 5、whatweb 小结 目录探测 1、gobuster 2、dirsearch WEB CMS 1、cms漏洞探索 2、RCE漏洞利用 提权 get user.txt 本地提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface:…

【Linux C | 文件操作】获取文件元数据的几个函数 | stat、fstat、lstat

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

吸烟者问题-第三十一天

目录 问题描述 解决问题 是否需要设置一个专门的互斥信号量&#xff1f; 结论 问题描述 该题属于”生产者-消费者”问题&#xff0c;更详细的说应该是“可生产多种产品的单生产者-多消费者” 解决问题 1、 关系分析&#xff1a;找出题目中描述的各个进程&#xff0c;分析…

(一)输出输入

文章目录 输出printf输出格式控制常见的几种格式输出小数输出很奇特指定位数对齐方式 代码现象 输入scanf输入格式控制输入坑代码现象 %c 格式控制的坑混合类型输入问题 输出printf 输出格式控制 如&#xff1a;%(占位符/格式字符) printf(“a%d”,a); 常见的几种格式输出 …

海外网红营销:母婴品牌提升影响力和市场份额的绝佳途径

随着全球化的加速和社交媒体的普及&#xff0c;越来越多的母婴品牌开始寻求海外市场拓展。在这个过程中&#xff0c;海外网红营销成为了品牌方们青睐的策略之一。本文Nox聚星将和大家探讨母婴品牌如何利用海外网红营销来提升品牌影响力并拓展市场份额。 母婴品牌的核心消费者是…

BIOS:计算机中的特洛伊木马

内容概述&#xff1a; 由于主板制造商在计算机启动时用来显示品牌徽标的图像分析组件相关的问题&#xff0c;多个安全漏洞&#xff08;统称为 LogoFAIL&#xff09;允许攻击者干扰计算机设备的启动过程并安装 bootkit。x86 和 ARM 设备都面临风险。主板固件供应链安全公司 Bin…