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.rhkb.cn/news/490679.html

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

相关文章

Linux驱动开发(12):中断子系统–按键中断实验

本章我们以按键为例讲解在驱动程序中如何使用中断&#xff0c; 在学习本章之前建议先回顾一下关于中断相关的裸机部分相关章节&#xff0c; 这里主要介绍在驱动中如何使用中断&#xff0c;对于中断的概念及GIC中断控制器相关内容不再进行讲解。 本章配套源码和设备树插件位于“…

Grafana配置告警规则推送企微机器人服务器资源告警

前提 已经部署Grafana&#xff0c;并且dashboard接入数据 大屏编号地址&#xff1a;Node Exporter Full | Grafana Labs 创建企微机器人 备注&#xff1a;群里若有第三方外部人员不能创建 机器人创建完成&#xff0c;记录下来Webhook地址 Grafana配置告警消息模板 {{ define &…

[WiFi] WiFi安全加密WEP Vs WPA Vs WPA2 Vs WPA3整理

WiFi安全标准时间线 WEP&#xff08;Wired Equivalent Privacy&#xff09; WEP最早于1997年推出&#xff0c;是为了保护无线网络上的数据通信而设计的。当时&#xff0c;Wi-Fi技术还处于起步阶段&#xff0c;人们开始意识到需要一种安全协议来防止未经授权的访问和窃听。WEP被…

使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式

网上其他人写的都解决不了&#xff0c;要不用的是CMSIS V1版本&#xff0c;根据他们的方式搞完还是报错&#xff0c;今天花点时间自己搞一下。 不想自己动手&#xff1f;没问题&#xff0c;模版已上传Gitee https://gitee.com/maybe_404/stm32-f4xx_-free-rtos_-lwip_-templa…

群控系统服务端开发模式-应用开发-操作记录功能开发

一、开放路由 在根目录下route文件夹下修改app.php文件&#xff0c;代码如下&#xff1a; // 操作日志Route::get(token/get_list,permission.Token/getList);// 获取操作日志列表Route::post(token/get_all,permission.Token/getAll);// 获取操作日志所有数据Route::post(toke…

大模型闯关学习——L1G6000 OpenCompass 评测书生大模型实践

任务要求&#xff1a; 基础任务&#xff1a; 首先创建开发机 进入开发机&#xff1a; 创建测评所需要的环境 conda create -n opencompass python3.10 conda activate opencompass cd /root git clone -b 0.3.3 https://github.com/open-compass/opencompass cd opencompas…

C# 探险之旅:第三十节 - 类型class(继承Inheritance) —— 当“儿子”继承“老爸”的遗产

嘿&#xff0c;探险家们&#xff01;欢迎再次踏上我们的C#奇幻旅程。今天&#xff0c;我们要聊一个既有趣又实用的话题——继承&#xff08;Inheritance&#xff09;&#xff01;想象一下&#xff0c;如果你的“儿子”能够继承“老爸”的遗产&#xff0c;那编程世界里的对象们也…

排序算法(2)——快速排序

目录 1. 实现方式 1.1 霍尔法 ​ 1.2 挖坑法 1.3 前后指针法 2. 复杂度分析 3. 快速排序优化 3.1 三数取中 3.2 小区间使用插入排序 3.3 非递归实现 快速排序是英国计算机科学家托尼・霍尔&#xff08;C. A. R. Hoare&#xff09;在 1960 年年提出的一种二叉树结构的交…

【python】最新版抖音js逆向拿到数据,非常详细教程(附完整代码)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

apollo2.0.0本地调试运行

一、下载源码 https://github.com/apolloconfig/apollo/tree/v2.0.0 二、本地环境 jdk 1.8 mysql 5.7 maven 3.6.3 三、IDEA运行源码 IDEA直接Open打开项目即可 需要依次启动configservice、adminservice、portal三个服务 基于apollo-assembly模块的ApolloApplication…

STP(生成树协议)

STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路&#xff0c;并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态&#xff0c;当网络出现拓扑变更时&#xff0c;STP能够感知并且进行自动…

3D 生成重建039-Edify 3D:Nvidia的3D生成大模型

3D 生成重建039-Edify 3D:Nvidia的3D生成大模型 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 文档介绍了Edify 3D&#xff0c;一种为高质量的3D资产生成而设计的高级解决方案。首先在多个视点上合成了所描述对象的RGB和表面法线图像正在使用扩散模型。然后使用多视图…

Maven学习(依赖版本维护、依赖传递、解决Maven依赖冲突的3种方式)

目录 一、Maven的依赖版本维护。 &#xff08;1&#xff09;为什么需要依赖版本维护&#xff1f; &#xff08;2&#xff09;依赖统一管理的具体操作步骤。 第一步。在pom.xml文件中使用标签定义jar包的版本。 第二步。在的对应jar的中使用"${}"引入上面定义好的版本…

CV(4)--边缘提取和相机模型

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 边缘提取&#xff08;涉及语义分割&#xff09;&#xff1a; 图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分&#xff0c;暗到亮为正 求边缘的幅度&#xff1a;sobel&#xff0c;Canny算子 图像分高频分量和低…

鸿蒙项目云捐助第三讲鸿蒙App应用的启动页实现

鸿蒙项目云捐助第三讲鸿蒙App应用的启动页实现 对于移动端的应用&#xff0c;一般启动app的时候&#xff0c;首先显示启动页&#xff0c;启动页中显示出该应用一些介绍内容&#xff0c;通过这个介绍内容可以了解这个应用具体处理的内容。 进入启动后&#xff0c;通过滑动启动…

flink sink kafka的事务提交现象猜想

现象 查看flink源码时 sink kafka有事务提交机制&#xff0c;查看源码发现是使用两阶段提交策略&#xff0c;而事务提交是checkpoint完成后才执行&#xff0c;那么如果checkpoint设置间隔时间比较长时&#xff0c;事务未提交之前&#xff0c;后端应该消费不到数据&#xff0c…

Mumu模拟器12开启ADB调试方法

在使用安卓模拟器进行开发或调试时&#xff0c;ADB&#xff08;Android Debug Bridge&#xff09;是一项不可或缺的工具。大多数模拟器默认开启了ADB调试功能&#xff0c;但在安装最新版的 Mumu模拟器12 时&#xff0c;可能会遇到 adb devices 无法识别设备的问题。 问题描述 …

C/C++中的宏定义

在C程序中&#xff0c;可以用宏代码提高执行效率。宏代码本身不是函数&#xff0c;但使用起来像函数。预处理器用复制宏代码的方式代替函数调用&#xff0c;省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程&#xff0c;从而提高了速度&#xff0c;避免函数…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

批量导出工作簿中高清图片-Excel易用宝

我同事在工作簿中做了三个图表&#xff0c;现在需要将工作簿中的图标导出保存为高清图片&#xff0c;通过右键另存为保存的图片并非高清图片&#xff0c;其实要把Excel工作簿中的图表或图片对象导出为高清图片也很简单。 单击Excel易用宝 Plus&#xff0c;导出高清图片。 在导出…