天道酬勤,学无止境

Generating additional code through a custom attribute

I am still fairly new to C# and I have a question regarding attributes. Is it possible to write a custom attribute which generates additional code at compile time. For example:

[Forever]
public void MyMethod()
{
    // Code
}

Turns into:

public void MyMethod()
{
    while (true)
    {
        // Code
    }
}

评论

Out of the box, no, this isn't something that can be done. Using PostSharp though, this can be achieved:

http://www.sharpcrafters.com/aop.net/compiletime-weaving

Afterthought works similar to PostSharp by performing compile-time modifications to your assemblies. In the case of Afterthought you can choose how to identify the changes to make, either by looking for attributes you have defined, looking for common patterns, or simply establishing conventions.

For example, I am working on an example using Afterthought to automatically implement Entity Framework interfaces at compile-time for types exposed by a DbContext in a compiled assembly. In this case I am simply looking for any type that is a subclass of DbContext and then looking at the properties on this type to determine which POCO types to modify to work with Entity Framework.

However, compile-time manipulation of assemblies like this, while powerful, is still for me a choice of last resort. It is not natively supported by the .NET framework and Microsoft tools. Though I wrote Afterthought to support complex cases where this level of indirection was required, I prefer to use standard object-oriented patterns and intrinsic C# language features like delegates as much as possible. Ultimately, introducing custom attributes that inject code introduces a domain specific language into your solution, which will be one or thing to learn/understand for someone reviewing your code, like when answering an SO question ;-)

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 使用属性调用方法(Using Attributes to Call Methods)
    问题 我有各种单独的方法,在继续自己的实现之前,它们都需要执行相同的功能。 现在我可以在每个方法中实现这些功能,但我想知道是否有办法利用attributes来做到这一点? 作为一个非常简单的例子,所有网络调用都必须检查网络连接。 public void GetPage(string url) { if(IsNetworkConnected()) ... else ... } 这会起作用,但我必须为每个使用网络的方法调用IsNetworkConnected方法并单独处理它。 相反,我想这样做 [NetworkCall] public void GetPage(string url) { ... } 如果网络不可用,一个错误就被调用和GetPage被忽略,否则GetPage被调用。 这听起来很像面向方面的编程,但我不想为几次调用实现一个完整的框架。 这更像是一种学习练习,而不是实现,所以我很好奇如何最好地实现这样的事情。 回答1 你可以使用 PostSharp,它是面向方面的 .NET 框架,看起来很容易使用: static void Main(string[] args) { Foo(); } [IgnoreMethod(IsIgnored=true)] public static void Foo() { Console.WriteLine("Executing Foo()..."
  • 为自定义 XmlSerializer 生成 Xml 序列化程序集(Generating an Xml Serialization assembly for a custom XmlSerializer)
    问题 我的类中有使用与默认序列化程序不同的 XML 结构进行序列化/反序列化的方法。 这些方法为我的类型创建了一个 XmlSerializer,但有一大堆覆盖。 当这些方法被调用时,我猜在内部 .NET 仍然会生成一个序列化程序集,但我想在编译后生成这个程序集,这样它就不会在运行时生成。 如何为此自定义序列化生成序列化程序集? 如果我将 sgen.exe 用于该类型,它似乎只生成默认的序列化程序。 特别是我需要生成序列化程序集的原因是我的代码是从 Internet Explorer 进程中调用的,该进程在保护模式下运行。 如果 .net 运行时尝试生成序列化程序集,它会调用 csc.exe 并提示用户,询问是否允许运行此进程。 我不希望用户被提示! 因此需要在没有 csc.exe 的情况下完成所有序列化/反序列化。 我能想到的一种选择是捕获在运行时生成的 .cs,将其放入单独的程序集中,然后将其包含在我的产品中。 除了有点讨厌之外,这还提出了如何在我的构建过程中自动生成 .cs 的问题...... 也许还值得一提:我的自定义 xml 序列化也会序列化嵌套类,所以也许它们也会有自动生成的序列化程序。 我的自定义序列化主要是按照以下几行完成的 - 它将 XmlIgnore 添加到某些属性并从其他属性中删除 XmlIgnore。 许多这些属性返回需要序列化的对象,其中一些实现
  • webpack插件机制横向扩展webpack的构建能力 三个插件的使用实例
    文章目录 1.几个插件的常用应用场景2.体验插件机制2.1 自动清除输出目录的插件2.2 用于生成 HTML 的插件2.3 用于复制文件的插件 上一篇博客分享了webpack的loader机制,今天分享另外一个重要的核心特性:插件机制。 Webpack 插件机制的目的是为了增强 Webpack 在项目自动化构建方面的能力。通过上一篇博客的介绍你应该知道,Loader 就是负责完成项目中各种各样资源模块的加载,从而实现整体项目的模块化,而 Plugin 则是用来解决项目中除了资源模块打包以外的其他自动化工作,所以说 Plugin 的能力范围更广,用途自然也就更多。 1.几个插件的常用应用场景 实现自动在打包之前清除 dist 目录(上次的打包结果);自动生成应用所需要的 HTML 文件;根据不同环境为代码注入类似 API 地址这种可能变化的部分;拷贝不需要参与打包的资源文件到输出目录;压缩 Webpack 打包完成后输出的文件;自动发布打包结果到服务器实现自动部署。 总之,有了 Plugin 的 Webpack 几乎“无所不能”。借助插件,我们就可以轻松实现前端工程化中绝大多数经常用到的功能,这也正是很多初学者会认为 “Webpack 就是前端工程化,或者前端工程化就是 Webpack” 的原因。 2.体验插件机制 2.1 自动清除输出目录的插件 通过之前的尝试,你可能已经发现
  • Magento-基于用户输入的报价/订购产品项属性(Magento - Quote/order product item attribute based on user input)
    问题 概括 我想创建一个产品属性,该属性不保存到产品中,也不像普通产品属性一样显示在产品编辑页面上。 相反,我希望将其保存到订单/报价项目中并显示在订单,发票等上。 在将产品添加到购物车之前,客户还应该可以在前端对它进行配置。 细节 就像“自定义选项”一样,应将表单元素添加到前端产品页面。 与“自定义选项”不同,这不是实际的产品属性。 它不应显示在管理产品页面或属性集上。 要求客户提供有效值。 我需要能够进行服务器端验证。 我想要一个生成其html的.phtml模板。 目前,我能够以令人满意的(设计)结果覆盖app / design / frontend / base / default / catalog / product / view / type / default.phtml 。 但是我不知道如何捕获,验证并最终保存其价值。 此表单元素的值应与报价/订购产品项一起保存。 该值应显示在所有发票,订单,销售电子邮件中。 我想使用模板来控制输出,或者至少能够返回用于显示值的字符串 我的问题 将产品添加到购物车时,如何验证并最终将值从前端产品页面上的<input>保存到报价项目,然后在结帐过程中保存到订单项目? 如何在订单,发票,销售电子邮件和此类页面上显示此值? 如何过滤订单集合以获取包含我的值设置为特定值的商品的订单? 更新1 我发现可以在诸如sales_quote_item
  • JPA基本注解
    JPA之常用 基本注解 1、常用基本注解 @Entity @Table @Basic @Column @GeneratedValue @Id 2、特殊注解 @Transient @Temporal 用 table 来生成主键 3、常用注解的使用 1、@Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。如声明一个实体类 Customer,它将映射到数据库中的 customer 表上。 2、@Table 当实体类与其映射的数据库表名不同名时需要使用 @Table 标注说明,该标注与 @Entity 标注并列使用,置于实体类声明语句之前,可写于单独语句行,也可与声明语句同行。 @Table 标注的常用选项是 name,用于指明数据库的表名 @Table标注还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或模式,通常为数据库名。 uniqueConstraints 选项用于设置约束条件,通常不须设置。如下代码: @Table(name="JPA_CUSTOMERS")//主要是映射表名对应的数据库表名 JPA_CUSTOMER默认情况下可以不写表名与持久化类名相同 @Entity //表明这是一个持久化类 public class Customer { 3、@Id @Id
  • Mybatis详解系列(五)--Mybatis Generator和全注解风格的MyBatis3DynamicSql
    简介 Mybatis Generator (MBG) 是 Mybatis 官方提供的代码生成器,通过它可以在项目中自动生成简单的 CRUD 方法,甚至**“无所不能”的高级条件查询(MyBatis3DynamicSql**,有了它根本不需要 Mybatis Plus),让我们避免了进行数据库交互时需要手动创建对象和配置 Mybatis 映射等基础工作。 另外,MBG 有很好地扩展性,它提供了大量的接口和插件用来给我们自定义生成的代码应该是什么样子,例如我们可以自定义注释、代码格式化、添加 toString 方法等。本文将讲解如何使用这些接口。 本文内容大致如下,由于篇幅较长,可选择阅读: 如何使用 MBG 生成代码;详解 MBG 的配置,将配置使用自定义注释生成器、实体类中添加 toString/equals/hashCode方法等。MyBatis3DynamicSql 风格(无 XML) API 的使用。 通过本文的学习,你将能够通过简单改造 MBG 来生成自己想要的代码,另外,我们也将认识强大的 MyBatis3DynamicSql 风格(它提供的条件类使用 Lambda 解耦,全注解,支持单表查询、多表查询、分页、排序、分组等等)。 关于 MBG 生成代码的风格 MBG 支持生成不同风格、不同语言的代码,例如,MBG 能够生成 Java 或 Kotlin 代码。另外,MBG
  • Webpack 5 中的优化细节
    为什么在开启增量构建后,有时候 rebuild 还是会很慢呢?我们可以从两方面来找原因。首先,Webpack 4 中的增量构建只运用到了新增模块与生成 Chunk 产物阶段,其他处理过程(如代码压缩)仍需要通过其他方式进行优化,例如分包和压缩插件的缓存。其次,过程中的一些处理会额外增加构建时间,例如生成 Source Map 等。因此还是需要通过统计各阶段的执行时间来具体问题具体分析。 Webpack 5 中的效率优化点 Webpack 5 中的变化有很多,完整的功能变更清单参见官方文档,这里我们介绍其中与构建效率相关的几个主要功能点: Persistent Caching Tree Shaking Logs Persistent Caching 首先我们通过示例来看下 Webpack 5 中缓存方面的变化。 持久化缓存的示例 如下面的代码和图片所示: ./webpack.cache.config.js ... module.exports = { ... cache: { type: 'filesystem', cacheLocation: path.resolve(__dirname, '.appcache'), buildDependencies: { config: [__filename], }, }, ... } 可以看到,初次构建完整花费了 3282ms
  • 使用 java sax 生成 xml 属性时遇到问题(having trouble generating xml attribute with java sax)
    问题 我在 java 中使用 SAX api 将 csv 转换为 xml。 我可以生成一个没有属性的简单 xml 文件,例如 <item> <item_id>1500</item_id> <item_quantity>4</item_quantity> </item> 但我找不到将 id 和数量设置为 item 元素的属性的方法,例如 <item id=1500 quantity=4/> 所有 SAX api 似乎都提供了startElement 、 character和endElement方法。 (我知道这些方法中有attribute参数,但我似乎根本无法设置属性)。 回答1 这里有一些不错的示例代码,其中包括添加属性。 import java.io.*; // Xerces 1 or 2 additional classes. import org.apache.xml.serialize.*; import org.xml.sax.*; import org.xml.sax.helpers.*; [...] FileOutputStream fos = new FileOutputStream(filename); // XERCES 1 or 2 additionnal classes. OutputFormat of = new OutputFormat("XML"
  • 基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)
    TableGo_20210212 v7.0.0 正式版发布,此次版本更新如下: 1、新增对DB2数据库的支持 2、新增按字段生成文件,支持把字段、JSON、XML数据转换成任何代码 3、新增大量新的自定义模板,如:DDL、随机数据、导出数据、数据模型、Ant Design for Vue的CRUD模板等 4、新增更多用于自定义模板生成随机数的内置静态对象 5、公共参数新增高级设置,可动态配置Oracle连接模式、MySQL连接驱动、数据查询权限、数据查询方式、数据库Scheme 6、合并生成自定义文件和生成Swagger离线API文档的功能,并支持Swagger3 7、生成自定义文件新增模板子目录设置,是相对于模板目录的下级子目录,模板目录可建无限级子目录 8、生成数据库文档新增ER图字体设置 9、JSON参数配置新增文件操作功能、字段数据类型映射转换等功能 10、优化JSON参数配置,可以同时使用表命名方式和驼峰命名方式填写参数,前端可以直接复制Swagger上的实体名和属 性名配置上去生成代码,无需关注数据库表和字段 11、生成自定义文件移除项目名、文件后缀名、文件名首字母、项目源码目录等配置项 12、界面优化、可以动态切换皮肤主题(从BeautyEye切换到其它主题需要重启才能看到效果)、移除Quaqua主题 13、修复使用MySQL数据库生成的数据长度不正确的问题 14
  • 报告分析工具创建完美的分析报告
    目录 前言本书涵盖的内容 这本书需要什么 这本书是给谁的 约定 读者反馈 客户支持 下载示例代码 下载本书的彩色图像 勘误 海盗行为 问题1. Pentaho报告简介介绍Pentaho报告 引入Pentaho报告工具 用户类型和所需知识 技术优势 商业友好的开源许可证 Pentaho Reporting的典型用途 运营报告 商业智能报告 财务报告 生产报告 Pentaho报告历史记录 功能概述 先进的报告算法 大量可用数据源 多种输出格式 像素精确的丰富格式 嵌入式图表 报告参数化 公式和样式表达 子报表 交叉表报告 互动报告 丰富的创作工具 报告服务器 用于生成报告的Java API 可扩展性 Pentaho报告网站 Pentaho Reporting架构 报表引擎的库 报告引擎核心 报表引擎扩展 摘要2报表设计器入门您的环境先决条件 设置Pentaho报表设计器 SamplaData模式 用户界面介绍 菜单和工具栏 报告元素调色板 报告画布选项卡 报告浏览器 元素属性 留言内容 使用向导创建第一个报告 引入报告设计向导 定义外观 定义数据源和查询 定义布局 格式化字段 预览报告 保存并打开报告 摘要3.报告SDK入门获取Pentaho Reporting SDK Pentaho Reporting SDK的剖析 使用随附的Eclipse项目 介绍所包含的示例 使用Pentaho
  • 浅谈数仓建模及其方法论
    认识数据仓库 1.数仓的定义: 2.数据仓库和数据库的区别: 数仓的发展 1.简单报表阶段:这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。 2.数据集市阶段:这个阶段,主要是根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现,能够提供对特定业务指导的数据,并且能够提供特定的领导决策数据。 3.数据仓库阶段:这个阶段,主要是按照一定的数据模型,对整个企业的数据进行采集,整理,并且能够按照各个业务部门的需要,提供跨部门的,完全一致的业务报表数据,能够通过数据仓库生成对对业务具有指导性的数据,同时,为领导决策提供全面的数据支持。 通过数据仓库建设的发展阶段,我们能够看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。因此,数据模型的建设,对于我们数据仓库的建设,有着决定性的意义。 数仓建设的意义 1.理清业务数据:随着数据量和业务数据表的不断扩张,需要我们理清数据作用域,就是做什么的,可以清晰的找到数据来源。能够帮助我们的企业或者是管理机关对本单位的业务进行全面的梳理。通过业务模型的建设,我们应该能够全面了解该单位的业务架构图和整个业务的运行情况,能够将业务按照特定的规律进行分门别类和程序化,同时
  • 什么是Mock.js以及用法
    什么是Mock.js 官网:http://mockjs.com/ 文档:https://github.com/nuysoft/Mock/wiki Mock.js 是用于生成随*机数据,拦截 Ajax 请求。 通过拦截 Ajax 请求,根据数据模板生成并返回模拟数据,让前端攻城师独立于后端进行开发,帮助编写单元 测试。 Mock.js 作用: 1. 前后端分离 让前端攻城师独立于后端进行开发。 增加单元测试的真实性 通过随机数据,模拟各种场景。 开发无侵入 不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响应数据。 4. 用法简单 符合直觉的接口。 数据类型丰富 支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。 方便扩展 支持扩展更多数据类型,支持自定义函数和正则 安装 Mock.js 1、npm install mockjs 使用: //使用mock var Mock = require(‘mockjs’); var mcok = Mock.mock({ … }) 模板规则 末班规则:‘name|rule’:value name:属性名rule:属性规则value:属性值 属性名和规则之间用|隔开,规则是可以选的。 一共七个rule ‘name|mix-max’:value‘name|count’:value‘name|mix-max.dmix-dmax
  • 使用JAXB从XMLSchema.xsd生成Java类(Generating Java classes out of XMLSchema.xsd using JAXB)
    问题 我正在使用jaxb从xml模式中生成Java类。 该模式导入XMLSchema.xsd,其内容用作文档中的元素。 如果我分别删除导入和对“ xsd:schema”的引用,那么绑定编译器将成功生成类。 如果我不这样做,它将产生以下错误,如果我仅尝试从XMLSchema.xsd生成Java类,这将是相同的! > C:\Users\me>"%JAXB%/xjc" -extension -d tmp/uisocketdesc -p uis.jaxb uisocketdesc.xsd -b xml_binding_test.xml -b xml_binding_test_2.xml -b xml_binding_test_3.xml parsing a schema... compiling a schema... > [ERROR] A class/interface with the same name "uis.jaxb.ComplexType" is already in use. Use a class customization to resolve this conflict. line 612 of "http://www.w3.org/2001/XMLSchema.xsd" > [ERROR] (Relevant to above error) another
  • Rails forms for has_many through association with additional attributes?
    How can I generate form fields for a has_many :through association that has additional attributes? The has_many :through relationship has an additional column called weight. Here's the migration file for the join table: create_table :users_widgets do |t| t.integer :user_id t.integer :widget_id t.integer :weight t.timestamps end The models look like this: User has_many :widgets, :through => :users_widgets, :class_name => 'Widget', :source => :widget has_many :users_widgets accepts_nested_attributes_for :widgets # not sure if this is necessary Widget has_many :users, :through => :users_widgets,
  • 使用active_model_serializers序列化深层嵌套的关联(Serializing deeply nested associations with active_model_serializers)
    问题 我正在使用Rails 4.2.1和active_model_serializers 0.10.0.rc2 我是API的新手,因此选择了active_model_serializers因为它似乎已成为Rails的标准(尽管我不反对使用RABL或其他序列化器) 我遇到的问题是,我似乎无法在多级关系中包括各种属性。 例如,我有: 专案 class ProjectSerializer < ActiveModel::Serializer attributes :id, :name, :updated_at has_many :estimates, include_nested_associations: true end 和估计 class EstimateSerializer < ActiveModel::Serializer attributes :id, :name, :release_version, :exchange_rate, :updated_at, :project_id, :project_code_id, :tax_type_id belongs_to :project belongs_to :project_code belongs_to :tax_type has_many :proposals end 提案 class ProposalSerializer
  • 使用 WCF 的契约优先 SOA(Contract-First SOA with WCF)
    问题 这个问题更像是探索人们在实际情况下在社区中所做的事情,而不是一个有针对性的问题。 我对此进行了相当广泛的搜索,虽然我发现很多博主提倡契约优先服务设计和一些支持他们的评论,但我还没有找到很多关于使用 WCF 实施契约优先的实用信息,利弊我最近对 ​​SOA 做了一些广泛的研究,主要是通过 Thomas Erl 的书,他提倡的主要概念之一是契约优先设计。 我的问题如下: 您如何使用 .NET 和 WCF 进行契约优先服务设计? 除了 svcutil 之外,还有其他工具可以从合约生成客户端和服务吗? (任何与 VS 集成的东西都是理想的) 您在契约优先设计和 wCF 方面遇到过哪些现实世界的专业人士? 你在契约优先设计和 WCF 中遇到过哪些现实世界的缺点? 契约优先开发的主要问题之一似乎是工具。 Svcutil 是我发现的唯一可以从合约生成服务代码的东西,它的输出非常差。 它的单个文件,充满了属性和代码生成工件,并且基本上需要在合约更新时重新生成和替换。 我更喜欢更好的方法,最好是不需要重新替换的方法。 我什至可以手动创建服务端合同,假设它在现实世界中是实用的。 编辑: 虽然 WCSF 解决了我的迫切需求,但学习 Protocol Buffers 和 Service Factory 都是很有趣的工具,我相信它们将来会对我有所帮助。 回答1 WSCF 提供了一个与 VS
  • generatorConfiguration配置详解
    generatorConfiguration配置详解 XML配置详解 在MBG中,最主要也最重要的就是XML配置文件,因此本篇文章主要的内容就是XML配置。 这里按照配置的顺序对配置逐个讲解,更细的内容可以配合中文文档参照。 1. 配置文件头 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> 使用最新版的MBG需要使用上面的xml头,配置文件必须包含上面的DOCTYPE。 2. 根节点<generatorConfiguration> generatorConfiguration节点没有任何属性,直接写节点即可,如下: <generatorConfiguration> <!-- 具体配置内容 --> </generatorConfiguration> 3. <generatorConfiguration>子元素 从这段开始,就是配置的主要内容,这些配置都是generatorConfiguration元素的子元素。 包含以下子元素
  • java注解--史上最清晰,讲解最全!!!
    java注解--史上最清晰,讲解最全!!!前言一、注解是什么及其本质? 1.可以用于生成文档2.进行编译检查3.代码分析 @Target注解: @Rentetion注解: @Documented注解: @Inherited注解: (1)注解的本质(2)注解的分类(3)注解的作用二、自定义注解1.怎样自定义注解?总结前言在学习注解前,先来认识一下注释,我们都知道注释是是用来说明代码的,不会经过编译,注释的主要目的是方便程序员阅读! 同样,注解也是用来说明代码的,只不过注解是方便计算机阅读;声明:文章篇幅可能有点长,希望耐心阅读,相信定有收获!!一、注解是什么及其本质?(1)注解的本质简单来说,注解是JDK1.5之后引入的新特性,用来标注程序的,提供与程序有关的数据,但与程序本省无关,可以作用在包,类,方法,字段等前面,使用注解时用@+注解名称注解的本质是接口 我们可以用反编译来验证public @interface TestAnno {}先编译为字节码文件,再用javap反编译可以知道:注解的本质是一个interface接口,并且继承了Annotation接口通过查看Annotation的继承关系进一步验证可得知Annotation接口是所有注解的父接口(2)注解的分类JDK内置注解 Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java
  • 如何用好企业微信
    企业微信发布初期,总是会与钉钉同框出现,时至今日,还有很多的作者对企业微信和钉钉的区别做文章。毕竟在企业微信2.0版本以前,主要的重心是放在了企业内部高效办公层面,直到企业微信3.0版本的发布,新增了很多对外的新功能,大家对企业微信的关注度骤然上升,优势逐渐呈现在大众面前。 企业微信具备哪些优势: 1.高效沟通: 企业微信是面向各类型企业和机构用户的沟通工具,可以像微信聊天功能一样,随用随聊,支持企业统一管理通讯录,通过通讯录快速搭建内部群聊,资料传输等,此外还集成了语音通话、视频通话、远程协助、公费电话等功能。 如何用好:善用语音通话与远程协助功能,工作中总有一己之力解决不了的问题,这时候就离不开同事或者领导的帮忙,而语音通话和远程协助的出现,大大提升了解决问题的效率,节省了沟通的时长。会看回执消息,这也是企业微信和微信不同的地方,发送消息后,左下角会显示小圆圈,点击即可查看已读或未读。 2.轻量办公: 企业微信同时也是一款高效的OA工具,在聊天的基础上,结合了公告、打卡、审批、会议、微文档、微盘、企业邮箱等30多项免费功能,用户在手机上就能轻松完成办公需求,即便在家办公,企业也可以一键下发通知召开会议,连接全国各地的员工,完成一天的工作。 如何用好:由原始的打卡机改为企业微信打卡,到达上班或者下班地点后,打开企业微信自动打卡,可以有效降低上下班忘记打卡,考勤很乱,工资错发等现象
  • 如何用好企业微信
    企业微信发布初期,总是会与钉钉同框出现,时至今日,还有很多的作者对企业微信和钉钉的区别做文章。毕竟在企业微信2.0版本以前,主要的重心是放在了企业内部高效办公层面,直到企业微信3.0版本的发布,新增了很多对外的新功能,大家对企业微信的关注度骤然上升,优势逐渐呈现在大众面前。 企业微信具备哪些优势: 1.高效沟通: 企业微信是面向各类型企业和机构用户的沟通工具,可以像微信聊天功能一样,随用随聊,支持企业统一管理通讯录,通过通讯录快速搭建内部群聊,资料传输等,此外还集成了语音通话、视频通话、远程协助、公费电话等功能。 如何用好:善用语音通话与远程协助功能,工作中总有一己之力解决不了的问题,这时候就离不开同事或者领导的帮忙,而语音通话和远程协助的出现,大大提升了解决问题的效率,节省了沟通的时长。会看回执消息,这也是企业微信和微信不同的地方,发送消息后,左下角会显示小圆圈,点击即可查看已读或未读。 2.轻量办公: 企业微信同时也是一款高效的OA工具,在聊天的基础上,结合了公告、打卡、审批、会议、微文档、微盘、企业邮箱等30多项免费功能,用户在手机上就能轻松完成办公需求,即便在家办公,企业也可以一键下发通知召开会议,连接全国各地的员工,完成一天的工作。 如何用好:由原始的打卡机改为企业微信打卡,到达上班或者下班地点后,打开企业微信自动打卡,可以有效降低上下班忘记打卡,考勤很乱,工资错发等现象