Dynamics 365 CRM- 后端

Dynamics 365 CRM 后端插件语法示例

public IPluginExecutionContext context = null;//上下文
public IOrganizationServiceFactory serviceFactory = null;//组织服务工厂对象
public IOrganizationService service = null;//Org服务对象//创建执行上下文
context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
//创建组织服务工厂对象
serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
//Org服务对象
service = serviceFactory.CreateOrganizationService(context.UserId);
//触发当前插件的那条记录
Entity entity= service.Retrieve(context.PrimaryEntityName, context.PrimaryEntityId, new ColumnSet(true));

查询

QueryExpression query = new QueryExpression("EntityName");
query.ColumnSet = new ColumnSet("EntityNameid");
query.Criteria = new FilterExpression(LogicalOperator.And);//条件与
query.Criteria.AddCondition("id", ConditionOperator.Equal, corpid);
query.Criteria.AddCondition("id", ConditionOperator.Equal, userid);
var list = svcContext.RetrieveMultiple(query).Entities.ToList();

添加:

Entity entity = new Entity("EntityName");
entity.Attributes.Add("date", DateTime.Now);
conn.CallerId = new Guid(list[0].Attributes["EntityNameid"].ToString());
OrganizationServiceProxy orgServiceNew = conn.OrganizationServiceProxy;
orgServiceNew.Create(entity);

修改

 Entity invoiceEntity = conn.Retrieve("EntityName", new Guid(id), new ColumnSet(true));svcContext.Attach(invoiceEntity);invoiceEntity.Attributes["修改的字段"] = longitude;svcContext.UpdateObject(invoiceEntity);svcContext.SaveChanges();

批量事务处理:

ExecuteTransactionRequest req = new ExecuteTransactionRequest();
OrganizationRequestCollection org = new OrganizationRequestCollection();
//添加
CreateRequest snInformationCreate = new CreateRequest();
snInformationCreate.Target = snInformation;
org.Add(snInformationCreate);
//修改
UpdateRequest entupdate = new UpdateRequest();
entupdate.Target = item;
org.Add(entupdate);
//执行事务
req.Requests = org;
orgService.Execute(req);

CRM字段类型:

类型名称:    值类型
单行/多行文本:    String
查找:    new EntityReference(objecttypename,Guid)
选项集    new OptionSet(Int)
两个选项:    false/true
整数:    Integer
浮点数:    Double
十进制数:    Decimal
货币:    new Money(Decimal)
日期和时间:    DateTime
存储列表值:    StringMap
存储附件:    annotation

窗体状态

获取窗体状态类型
var formType = Xrm.Page.ui.getFormType();
表单类型
0尚未定义
1创建
2更新
3只读
4已禁用
6批量编辑

//获取当前用户id
Xrm.Page.context.getUserId(); 
//获取当前用户的用户名    
Xrm.Page.context.getUserName();
//获取当用户的安全角色         
Xrm.Page.context.getUserRoles();
//获取当前用户   
Xrm.Page.context.getUser();  
//获取字段名为“name”的字段值        
Xrm.Page.getAttribute("name").getValue(); 
//给字段名为“name”的字段赋值    
Xrm.Page.getAttribute("name").setValue("Inputer");
//给字段名为“name”的字段赋值后自动提交        
Xrm.Page.getAttribute("name").setSubmitMode("Inputer"); 
//页面保存并刷新
Xrm.Page.data.save().then(function () {parent.window.location.reload();});     
//保存  
Xrm.Page.data.entity.save();
//刷新
Xrm.Page.data.refresh();  
//取流程的值
var phase = Xrm.Page.data.process.getActiveStage().getName(); 
//改变字段的字段需求  (注:required业务必选;none可选;recommended业务推荐)
Xrm.Page.getAttribute("字段名").setRequiredLevel("required");   
//隐藏名为“st_portfoliomanager”的字段            
Xrm.Page.getControl("st_portfoliomanager").setVisible(false); 
//取消隐藏(显示)名为“st_portfoliomanager”的字段       
Xrm.Page.getControl("st_portfoliomanager").setVisible(true); 
//锁字段名为“ownerid”的字段(注:页眉的字段加header_)       
Xrm.Page.getControl("ownerid").setDisabled(true);
//解锁字段名为“ownerid”的字段         
Xrm.Page.getControl("ownerid").setDisabled(false); 
//局部刷新(子网格也可以局部刷新)       
Xrm.Page.getControl("st_customerneed").refresh(); 
//删除选项集中的选项         
Xrm.Page.getControl("字段名").removeOption("值");  
//获取父页面的值
window.top.opener.Xrm.Page.getAttribute('tec_phase').getValue();
//隐藏tab
Xrm.Page.ui.tabs.get("tab_20").setVisible(false);
//获取当前页面的状态(注:1为新建,2为修改)    
Xrm.Page.ui.getFormType();
//关闭当前页面        
Xrm.Page.ui.close(); 
//打开页面    
Xrm.Utility.openEntityForm("实体名称", getEntityId);  
//获取当前记录id  
Xrm.Page.data.entity.getId();     
//获取当前记录name 
Xrm.Page.data.entity.getEntityName()
//设置tab标题
Xrm.Page.ui.tabs.getByName("tab_15").setLabel("文档" + "(" + docDatas.length + ")");  
//change事件
Xrm.Page.data.process.addOnStageChange(fnStageChanged);  
//select事件
Xrm.Page.data.process.addOnStageSelected(fnStageSelected); 
//获取当前Stage
var currentStage = execContext.getEventArgs().getStage(); 
//获取当前窗体名称
Xrm.Page.ui.formSelector.getCurrentItem().getLabel() 
//给字段绑定事件
Xrm.Page.getControl("header_new_salescontract_id").getAttribute().addOnChange(function () {}
//按节锁字段Xrm.Page.ui.controls.forEach(function (control) {if (control.getParent()!=null) {if (control.getParent().getName() != null) {name = control.getAttribute().getName()if (control.getParent().getName() == "tab_1_sections") {control.setDisabled(true);}}}})
//刷新父页面
window.top.opener.Xrm.Utility.openEntityForm(window.top.opener.Xrm.Page.data.entity.getEntityName(), window.top.opener.Xrm.Page.data.entity.getId());
//字段错误信息
Xrm.Page.getControl("attributeName").setNotification("notification content");
Xrm.Page.getControl("attributeName").clearNotification();
//窗体错误信息
Xrm.Page.ui.setFormNotification("notification content", "type", "notification name");//type:"INFORMATION","ERROR","WARNING"
Xrm.Page.ui.clearFormNotification('notification name');//clear all form notification when parameter is null```
//加载层
Xrm.Utility.showProgressIndicator("Please Wait.");
//禁用字段方法
function IsTrueDisabled(sectionlable, trueorfalse) {var tabs = Xrm.Page.ui.tabs;for (var i = 0, teblenth = tabs.getLength(); i < teblenth; i++) {var tab = tabs.get(i);var sections = tab.sections;for (var j = 0, sectionslenth = sections.getLength(); j < sectionslenth; j++) {var section = sections.get(j);if (section._controlName) {if (section._controlName.toLowerCase() == sectionlable) {Xrm.Page.ui.controls.forEach(function (control) {if (control.getParent() !== null && control._controlName != "tec_teammemberid" && control.getParent()._controlName === sectionlable && control.getControlType() !== "subgrid") {control.setDisabled(trueorfalse);}});break;}}}}
}
//获取页面层级
function getXrmObj () {var XRMOBJ = new Object();if (typeof Xrm != "undefined") {XRMOBJ = Xrm}else if (typeof window.parent.Xrm != "undefined") {XRMOBJ = window.parent.Xrm}else if (typeof window.opener.Xrm != "undefined") {XRMOBJ = window.opener.Xrm}else if (typeof window.opener.parent.Xrm != "undefined") {XRMOBJ = window.opener.parent.Xrm}else {throw new Error("Context is not available.");}return XRMOBJ;}
//隐藏选项卡
formContext.ui.tabs.get("tab_3").setVisible(false);
//隐藏节
formContext.ui.tabs.get("{ad0f2413-1961-40cd-8563-09e9b8e48aea}").sections.get("tab_3_section_1").setVisible(false);
//刷新导航栏按钮
formContext.ui.refreshRibbon(true);

Xrm.Page.data(客户端引用) | Microsoft Learn

一、常用语句-用户

Xrm.Page.context.getUserId();       //获取当前用户id
Xrm.Page.context.getUserName();       //获取当前用户的用户名
//获取当用户的安全角色(这个不建议用作权限判断使用,测试发现不同的用户,同一个角色查到的角色ID不同)
Xrm.Page.context.getUserRoles();  //获取用户角色id
Xrm.Utility.getGlobalContext().userSettings.roles;//获取用户角色ID及名称信息     
Xrm.Page.context.getUser();        //获取当前用户

二、常用语句-实体

实体属性获取

Xrm.Page.data.entity.getId(); //获取当前 Entity Id
Xrm.Page.data.entity.getEntityName();//获取当前 Entity 的 Name

查询带出选项集的名称

var result = null;
var req = new XMLHttpRequest();
req.open("GET", Xrm.Page.context.getClientUrl() + "/api/data/v9.1/xxxs(xxxx)", false);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
//核心语句
req.setRequestHeader("Prefer", "odata.include-annotations=OData.Community.Display.V1.FormattedValue");
req.send();
if (req.readyState === 4) {req.onreadystatechange = null;if (req.status === 200) {result = JSON.parse(req.response);} else {Xrm.Utility.alertDialog(req.statusText);}
};
console.log(result);

三、常用语句-字段

1.错误提示

Xrm.Page.getControl("lt_id").setNotification("该身份证号已被注册!", "IDCard2");
Xrm.Page.getControl("lt_id").clearNotification("IDCard2");

 2.字段值获取

Xrm.Page.getControl(sFieldName).getAttribute().getValue();

  取FormattedValue

entity["_scc_leadnum_value@OData.Community.Display.V1.FormattedValue"]  

3、在IFrame里面设置父页面字段上的值

parent.Xrm.Page.data.entity.attributes.get("new_tagselected").setValue("value");

4.字段控制

//给字段名为“name”的字段赋值后自动提交
Xrm.Page.getAttribute("name").setSubmitMode("Inputer");
//改变字段的字段需求  (注:required业务必选;none可选;recommended业务推荐)
Xrm.Page.getAttribute("字段名").setRequiredLevel("required"); 
//隐藏名为“st_portfoliomanager”的字段
Xrm.Page.getControl("st_portfoliomanager").setVisible(false);
//取消隐藏(显示)名为“st_portfoliomanager”的字段
Xrm.Page.getControl("st_portfoliomanager").setVisible(true);//锁字段名为“ownerid”的字段(注:页眉的字段加header_)
Xrm.Page.getControl("ownerid").setDisabled(true);
//解锁字段名为“ownerid”的字段  
Xrm.Page.getControl("ownerid").setDisabled(false);
//局部刷新(子网格也可以局部刷新)
Xrm.Page.getControl("st_customerneed").refresh();
//删除选项集中的选项 
Xrm.Page.getControl("字段名").removeOption("值");  
//添加选项集中的选项 
Xrm.Page.getControl("字段名").addOption(提前获取的缓存的选项);  

5.锁定所有字段

var controls = Xrm.Page.ui.controls.get();
for (var i in controls) {var control = controls[i];control.setDisabled(true);
}

6.日期类型字段处理

var myContactBirthday;
myContactBirthday = Xrm.Page.getAttribute("birthdate").getValue();
alert("Contact birthday is: " + myContactBirthday);
var year = myContactBirthday.getFullYear();
var month = myContactBirthday.getMonth(); // from 0 to 11
var day = myContactBirthday.getDate(); // from 1 to 31

7.自定义字段查找范围

var viewDisplayName = "xxx";
var entityName = "xxx";
var lookupControl = Xrm.Page.getControl("xxx");
var layoutXml = "<grid name='resultset' object='10013' jump='fullname' select='1' icon='1' preview='1'><row name='result' id='systemuserid'><cell name='fullname' width='300' /></row></grid>";
var id = '{xxx}';
var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'></fetch>";
lookupControl.addCustomView(id, entityName, viewDisplayName, fetchXml, layoutXml, false);
lookupControl.setDefaultView(id);

8、锁定属性

    /*** 锁定属性* @param {any} attributeName*/lockControlByAttributeName: function (attributeName) {let controls = Xrm.Page.getAttribute(attributeName).controls.getAll();if (controls) {for (con of controls) {con.setDisabled(true);}}}

四、常用语句-窗体

1.判断页面是否有修改

var formContext = null;
if (primaryControl !== null) {if (typeof primaryControl.getAttribute === 'function') {formContext = primaryControl; //called from the ribbon.} else if (typeof primaryControl.getFormContext === 'function'&& typeof (primaryControl.getFormContext()).getAttribute === 'function') {formContext = primaryControl.getFormContext(); // most likely called from the form via a handler}
}
var formIsDirty = formContext.data.getIsDirty();
// returns True for me when form is dirty 
if (formIsDirty) { return; 
}

2.错误提示

Xrm.Page.getControl("lt_id").setNotification("该身份证号已被注册!", "IDCard2");
Xrm.Page.getControl("lt_id").clearNotification("IDCard2");

3.获取窗体状态

//获取当前 form 的状态:
//0:Undefined 
//1:Create 
//2:Update 
//3:Read Only 
//4:Disabled 
//6:Bulk Edit 
var fromStatus= Xrm.Page.ui.getFormType();

4.弹窗提示

Xrm.Utility.alertDialog(this.statusText);

5.页面刷新

//页面刷新
Xrm.Utility.openEntityForm(Xrm.Page.data.entity.getEntityName(), Xrm.Page.data.entity.getId()
);
Xrm.Page.ui.refresh();
//页面保存并刷新
Xrm.Page.data.save().then(function () {parent.window.location.reload();}
);        

6.隐藏选项卡或节

//节隐藏
Xrm.Page.ui.tabs.get("tab_5").sections.get("tab_5_section_1").setVisible(false); 
//Tab隐藏
Xrm.Page.ui.tabs.get("tab_5").setVisible(false); 

7.新建跳转到实体并赋值

var customer= {};
//给新实体的”st_accountid“字段赋值
customer["st_accountid"] = Xrm.Page.data.entity.getId();  
customer["st_accountcount"] = 0;
//打开创建的记录
Xrm.Utility.openEntityForm("新实体名", null, customer);

8.使用指定窗体新建

var parameters= {};//给新实体的”st_accountid“字段赋值
parameters["st_accountid"] = Xrm.Page.data.entity.getId();       
parameters["st_accountcount"] = 0;
parameters["formid"]=窗体ID
//打开创建的记录
Xrm.Utility.openEntityForm("新实体名", null, customer);

9.阻止保存

function onload(){var eventArgs=context.getEventArgs();eventArgs.preventDefault();
}context.getEventArgs().preventDefault();//阻止保存操作

10.对Iframe或web窗体路径

function product_change() {var web = Xrm.Page.ui.controls.get("IFrame或web窗体名");var productid=Xrm.Page.getAttribute("st_productid").getValue();if(productid!=null){//DATA是要传的参数var params = "?DATA="+productid[0].id.replace('{', '').replace('}', ''); var newTarget = web +params;//传值web.setSrc(newTarget);    }
}  

确认弹框

//自定义弹框(确认/取消)
var confirmOptions = { height: 200, width: 450 };
var msg = { text: “message”, title: “title” };
Xrm.Navigation.openConfirmDialog(msg, confirmOptions).then(function (success) {if (success.confirmed) {}else{}
});

11.等待提示弹框

Xrm.Utility.showProgressIndicator("正在执行…");
Xrm.Utility.closeProgressIndicator();

12.lookup字段过滤

function shipToCustomView() {Xrm.Page.getControl("new_shiptoid").addPreSearch(shipToFilter);
}function shipToFilter() {var shiptoFilter;//客户代码var account = Xrm.Page.getAttribute("new_accountid").getValue();//销售公司var salescompany = Xrm.Page.getAttribute("new_salescompany").getValue();if (account == null || account[0] == null || salescompany == null || salescompany[0] == null)shiptoFilter = "<filter type='and'>"+ "<condition attribute='new_accountid' operator='eq' value='00000000-0000-0000-0000-000000000000' />"+ "<condition attribute='new_internalresourcesid' operator='eq' value='00000000-0000-0000-0000-000000000000' />"+ "</filter>";elseshiptoFilter = "<filter type='and'>"+ "<condition attribute='new_accountid' operator='eq' value='" + account[0].id + "'/>"+ "<condition attribute='new_internalresourcesid' operator='eq' value='" + salescompany[0].id + "'/>"+ "</filter>";Xrm.Page.getControl('new_shiptoid').addCustomFilter(shiptoFilter, 'LOOKUP实体name');
}

13.子网格设置指定列只读,使用子网格表onRecordSelect事件

function onrowselect(executionContext) {var entityObject = executionContext.getFormContext().data.entity;entityObject.attributes.forEach(function (attribute, i) {var control = attribute.controls.get(0);if (attribute.getName() == '需要锁定字段的名称') {control.setDisabled(true);}});
}

14.多窗体时跳转到指定窗体

var currentForm = Xrm.Page.ui.formSelector.getCurrentItem(); //获取当前窗体
if (currentForm != null) {if (currentForm.getLabel().toLowerCase() != formName.toLowerCase()) { //make sure it's not already this formvar availableForms = Xrm.Page.ui.formSelector.items.get(); //获取所有可选窗体for (var i in availableForms) {var form = availableForms[i];if (form.getLabel().toLowerCase() == formName.toLowerCase()) { //跳到指定名称窗体form.navigate();}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言——实现并求出两个数的最大公约数

问题描述&#xff1a;求出两个数的最大公约数 //求两个数的最大公约数 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #include<time.h>int main() {int a,b;printf("请您输入两个数 a 和 b\n");scanf…

采用qL-MPC技术进行小型固定翼无人机的路径跟随控制

来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机&#xff0c;相关参数如下&#xff1a; 这里用于guidance law的无人机运动学模型为&#…

三维无人机航迹算法的目标函数如何确定

一、定义目标函数 在三维无人机航迹算法中,目标函数的确定通常基于具体的任务需求和飞行约束。以下是一个简单的例子,展示了如何为三维无人机航迹规划定义一个目标函数。 例子:最小化飞行时间和避障的三维无人机航迹规划 1.任务描述:无人机需要从起点飞到终点,同时避开一些…

《Java核心技术I》Swing用户界面组件

Swing和模型-视图-控制器设计模式 用户界面组件各个组成部分&#xff0c;如按钮&#xff0c;复选框&#xff0c;文本框或复杂的树控件&#xff0c;每个组件都有三个特征&#xff1a; 内容&#xff0c;如按钮的状态&#xff0c;文本域中的文本。外观&#xff0c;颜色&#xff0c…

【Office】Office实现shift+鼠标滚轮左右滑动

Office实现shift鼠标滚轮左右滑动 windows系统安装office之后发现&#xff0c;使用shift鼠标滚轮不能够实现左右滑动&#xff0c;我记得以前的office好像是可以的&#xff0c;然后在网上找了一下&#xff0c;找到了一个插件可以实现这个功能 OfficeScroll插件 下载地址&…

vlan和vlanif

文章目录 1、为什么会有vlan的存在2、vlan(虚拟局域网)1、vlan原理1. 为什么这样划分了2、如何实现不同交换机相同的vlan实现互访呢3、最优化的解决方法&#xff0c;vlan不同交换机4、vlan标签和vlan数据帧 5、vlan实现2、基于vlan的划分方式1、基于接口的vlan划分方式2、基于m…

Web项目图片视频加载缓慢/首屏加载白屏

Web项目图片视频加载缓慢/首屏加载白屏 文章目录 Web项目图片视频加载缓慢/首屏加载白屏一、原因二、 解决方案2.1、 图片和视频的优化2.1.1、压缩图片或视频2.1.2、 选择合适的图片或视频格式2.1.3、 使用图片或视频 CDN 加速2.1.4、Nginx中开启gzip 三、压缩工具推荐 一、原因…

【CAN模块】介绍一种检查CAN模块芯片好坏的方法(SN65HVD230)

文章目录 前言一、以SN65HVD230为例介绍端口特性二、代码实现总结 前言 CAN总线收发器&#xff0c;是CAN控制器和物理总线间的接口器件&#xff0c;通常工程师会按照底层协议对其控制&#xff0c;近日笔者仔细了解了CAN总线收发器的物理原理&#xff0c;找到了一种通过观察端口…

RTMP推流平台EasyDSS在无人机推流直播安防监控中的创新应用

无人机与低空经济的关系密切&#xff0c;并且正在快速发展。2024年中国低空经济行业市场规模达到5800亿元&#xff0c;其中低空制造产业占整个低空经济产业的88%。预计未来五年复合增速将达到16.03%。 随着科技的飞速发展&#xff0c;公共安防关乎每一个市民的生命财产安全。在…

[win10] win10系统的下载及在虚拟机中详细安装过程(附有下载文件)

前言 win10 下载&#xff1a;https://pan.quark.cn/s/eb40e8ca57fb 提取码&#xff1a;VTZq 失效&#xff08;可能被官方和谐&#xff09;可评论或私信我重发 下载压缩包后解压 &#xff01;&#xff01;安装路径不要有中文 解压下载的.zip文件&#xff0c;得到.iso文件 打开…

lightRAG 论文阅读笔记

论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受&#xff0c;这篇论文整体看下来&#xff0c;没有太多惊艳的地方。核心就是利用知识图谱&#xff0c;通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…

[代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。

前言 二叉树的题目还是要会一流程构造函数之类的。其中还有回溯的思想 题目链接 654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 一、最大二叉树 思路&#xff1a;还是考察构造二叉树&#xff0c;简单来说就是给你一个数组去构建一个二叉树&#xff0c;递归来解决就…

Docker概述与基础入门

1. 什么是Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于自动化应用程序的构建、部署和管理。它允许开发人员通过将应用程序及其依赖项打包成容器镜像&#xff0c;从而确保应用可以在任何环境中一致地运行。Docker 容器是轻量级的、可移植的、且具有高度隔离性的…

C# 探险之旅:第三十六节 - 类型class之密封类Sealed Classes

嗨&#xff0c;探险家们&#xff01;欢迎再次搭乘我们的C#魔法列车&#xff0c;今天我们要去一个神秘又有点“傲娇”的地方——密封类&#xff08;Sealed Classes&#xff09;领地。系好安全带&#xff0c;咱们要深入“密封”的奇妙世界啦&#xff01; 什么是密封类&#xff1…

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生&#xff1a;张三、李四、王五 4个学生属性&#xff1a;语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑&#xff0c;范围为0到100,1位小数 性别使用QComboBox* 编辑&#xff0c;选项为&#xff1a;男、女 实现效果&#xff1a; 2…

UE5 C++ Subsystem 和 多线程

一.Subsystem先做一个简单的介绍&#xff0c;其实可以去看大钊的文章有一篇专门讲这个的。 GamePlay框架基础上的一个增强功能&#xff0c;属于GamePlay架构的范围。Subsystems是一套可以定义自动实例化和释放的类的框架。这个框架允许你从5类里选择一个来定义子类(只能在C定义…

Linux 添加spi-nor flash支持

1. spi-nor flash简介 在嵌入式ARM开发过程中通常会使用到spi-nor flash&#xff0c;主要用于固化u-boot镜像以支持spi方式启动系统。目前常用的spi-nor flash有gd25wq128e、w25q128等flash芯片&#xff0c;下述以gd25wq128e为例进行讲解。 2.调试通常遇到的问题 无法识别到…

C# 探险之旅:第三十七节 - 类型class之Object:万物之源的奇妙冒险

嘿&#xff0c;勇敢的探险家们&#xff01;欢迎再次踏上C#的神秘之旅。今天&#xff0c;我们将深入探索一个极其强大又无处不在的“大佬”——Object 类型。想象一下&#xff0c;它就像是C#世界里的“超级英雄祖先”&#xff0c;几乎所有的类型都得叫它一声“老祖宗”。 Objec…

LabVIEW实验站反馈控制系统

开发了一套基于LabVIEW的软X射线磁性圆二色实验站的反馈控制系统。这套系统主要用于实现对实验站高电压的精确控制&#xff0c;从而保持照射在样品上的流强稳定性&#xff0c;为分析样品吸收谱提供可靠基准&#xff0c;同时提供了易用的用户界面和强大的数据存储功能。 项目背景…

aws(学习笔记第十八课) 使用aws cdk(python)进行部署

aws(学习笔记第十八课) 使用aws cdk(python)进行部署 学习内容&#xff1a; 使用aws cdk(python)进行部署整体代码&#xff08;python的通常工程&#xff09;代码动作 1. 使用aws cdk(python)进行部署 aws cdk的整体架构 前面使用了cloudformation进行了json的aws的各种组件的…