WinCe 6.0 DataGrid 绑定List数据源

最近在项目中,使用了老的掉牙的Windows CE作为开发基础。在实际项目使用中,我从后端通过RestFul接口获取数据,然后将数据通过JSON转为了实体类,然后直接绑定到了DataGird中。

问题接着就来了,在DataGrid中使用List<T>作为数据源的时候,我要自定义DataGridTableStyle的时候,需要设置MappingName,但各种资料翻完也没有找到如何设置这个值的信息。

通过Debug,原来设置List为数据源需要将MappingName设置为 List`1

经过反复测试,发现直接设置为 typeof(List).Name即可

参考代码

// 实体对应类
public class MTPDAOnTheShelfTaskQueryResp
{
    public ControlInfo ControlInfo { get; set; }
    public List<ITEM> ITEM { get; set; }
    public RETURN RETURN { get; set; }
}
// 初始化界面设定
private void StockInQuery_Load(object sender, EventArgs e)
{
    dateTimePickerStart.Value = DateTime.Now;
    dateTimePickerEnd.Value = DateTime.Now;

    // 设定 Style
    ColumnStyle[] columnStyles = new ColumnStyle[]{
                new ColumnStyle("MBLNR","任务单号",100),
                new ColumnStyle("MAKTX", "日期", 70),
                new ColumnStyle("MATNR", "创建人", 100)
            };
    CommonHandles.SetDataGridStyles(dataGrid, columnStyles, "List`1");
}

/// <summary>
/// 设置DataGird列样式
/// </summary>
/// <param name="dataGrid"></param>
/// <param name="styles"></param>
/// <param name="mappingName"></param>
public static void SetDataGridStyles(DataGrid dataGrid, ColumnStyle[] styles, string mappingName)
{
    dataGrid.TableStyles.Clear();

    DataGridTableStyle tableStyle = new DataGridTableStyle();
    tableStyle.MappingName = mappingName;
    foreach (ColumnStyle style in styles)
    {
        DataGridColumnStyle col = new DataGridTextBoxColumn();
        col.MappingName = style.MappingName;
        col.HeaderText = style.DisplayName;
        col.Width = style.Width;
        tableStyle.GridColumnStyles.Add(col);
    }

    dataGrid.TableStyles.Add(tableStyle);

    // 设置行头不可见
    dataGrid.RowHeadersVisible = false;
    //dataGrid.ColumnHeadersVisible = false;
}

// 数据绑定
if (!string.IsNullOrEmpty(result))
{
    StockInQueryRespnose respnose = JsonConvert.DeserializeObject<StockInQueryRespnose>(result);
    if (respnose.MT_PDA_On_The_Shelf_Task_Query_Resp.RETURN.MSGTYPE.Equals("E"))
    {
        MessageBox.Show(respnose.MT_PDA_On_The_Shelf_Task_Query_Resp.RETURN.MSGTXT, "警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
        return;
    }
    else if (respnose.MT_PDA_On_The_Shelf_Task_Query_Resp.RETURN.MSGTYPE.Equals("S"))
    {
        dataGrid.DataSource = respnose.MT_PDA_On_The_Shelf_Task_Query_Resp.ITEM;
    }
}

Odoo邮件配置

在项目中,我们通常会使用到消息通知。然而在Odoo中,它提供来多种方式,Email、备注、消息通知。

这里我们使用Email作为消息的通知方式,那么说到Email发送消息,首先就需要配置Email到发送服务SMTP。在什么都不设置都情况下,我们需要为每一个用户都Email去设置这样都配置。极其不方便。

这里就延伸出来Odoo发送邮件都几种方式。

简单发送

mail.catchall.domain不设置

直接用发送账号发出,发件人需要与发送账号相同或者是其同一账号下的其他别名,否则会被邮件系统拒绝,如SMTPSenderRefused: 501 mail from address must be same as authorization user test@bcsytv.com。

接收方也直接回复该真实地址,非常容易理解,属于最原始的模式,最适合做邮件通知这种只集成发送不用集成接收的情况

代理发送

mail.catchall.domain设置,mail.bounce.alias不设置

间接用postmaster-odoo账号代发出,发送账号需要具有该名称授权,否则也会被邮件系统拒绝,如SMTPSenderRefused: 501 mail from address must be same as authorization user postmaster-odoo@bcsytv.com。

接收方默认回复catchall专用地址,由于属于代发,且发件地址、代发地址、回复地址都可以不相同,第一次使用还会有些颠覆邮箱观,甚至某些客户端出于谨慎还会出现欺诈提醒,但这确是目前国内用的最多的务实模式。

反弹发送

mail.catchall.domain设置,mail.bounce.alias设置

间接用bounce地址代发出,如bounce+5-res.users-2@bcsytv.com或者bounce+5@bcsytv.com,其中+5为邮件流水号,-2为单据流水号,可见前者还是单据相关邮件,接收方也默认回复catchall专用地址,因为其涉及到邮件接收等相关知识,而且国内免费邮箱服务基本没有完美支持,本文将不深入探讨,待以后ODOO邮件接收集成的时候在讨论如何配合Postfix实现完美收发自如。

认识了Odoo支持都几种发送方式后,这里我们选择第二种。

配置Odoo默认域

设置默认域

设置发件服务器

设置——技术——发件服务器

设置邮件发送服务器

设置收件服务器

设置——技术——收件服务器

设置邮件接收服务器

设定系统参数

设置——技术——系统参数

设定系统参数

如果系统参数中存在 mail.bounce.alias ,那么需要将其删除掉。

测试

设定测试内容

Install HomeBrew in Mac

HomeBrew是Mac下类型于Centos下但Yum包管理工具,使用Mac作为开发平台,使用HomeBrew是非常有必要的。

你可以在https://brew.sh/index_zh-cn这里找到更多关于HomeBrew的使用技巧。

安装HomeBrew

拷贝如下命令行在终端中执行。

# 安装Xcode
xcode-select --install

# 安装HomeBrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# 检查
brew doctor

# 更多命令
brew --help

镜像加速

注:该镜像是 Homebrew 二进制预编译包的镜像。本镜像站同时提供 Homebrew 的 formula 索引的镜像(即 brew update 时所更新内容),请参考 Homebrew 镜像使用帮助。

# 临时替换
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.cloud.tencent.com/homebrew-bottles
# 永久替换
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.cloud.tencent.com/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
# 永久替换
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.cloud.tencent.com/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc

Mybatis 插入或更新数据

在日常的开发中,我们经常会遇到这样的需求,我们有一个存储主数据的表,当有新的数据写入的时候,若库中存在数据则更新,否则当作新的数据写入。

一般情况下,我们会先对数据库进行一次Select,若数据存在我们则执行更新操作,当然这种方法在大部分情况下是可行的,但数据量大或者数据写入频繁的时候,这种方法就表现出来它的不稳定。

其实在数据库中都提供了UNIQUE约束规则,我们可以在数据库中建立UNIQUE约束规则,这样我们在插入具有约束限制数据的时候,我们就会得到一个异常,我们可以捕获这个异常,在异常块中进行更新操作。

在Mysql中我们可以使用更加简单的方式,Mysql提供了这样一个方法on duplicate key update可以让数据库直接搞定数据的插入或更新。

首先在数据库中创建约束

create unique index mytest_uindex on table (fieldA, FieldB);

编写SQL语句

insert into table (fieldA, filedB)) values ('a', 'b') on duplicate key update filedA = a1, fieldB = a2;

这样一波操作下来,你会神奇的发现,原来可以如此简单。。

该方法会删除掉已有数据,再进行插入,具体可以观察数据的自增ID。

具体用法可以查看这里:https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

Install docker in CentOS

Docker要求Centos系统的内核版本高于3.10,因此在安装前你需要知道你的系统是否支持Docker安装的最低内核要求。

uname -r

如果你安装过旧版本的Docker,那么你可以先删除它,再安装新的Docker版本。

# 查看电脑中已安装的Docker程序
yum list installed | grep docker

# 卸载Docker及相关程序
rpm -qa | grep docker | xargs rpm -e

# 手动卸载
yum remove docker  docker-common docker-selinux docker-engine

安装需要的软件包及设置docker安装源

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看仓库中所有的docker版本

yum list docker-ce --showduplicates | sort -r

安装Docker

yum install docker-ce

# 安装特定的版本
yum install <FQPN>

# 验证安装
docker -v

设置开机启动

systemctl start docker
systemctl enable docker

安装Docker-Compose

你可以在 https://github.com/docker/compose/releases 找到你需要的Docker-compose版本。

Document:https://docs.docker.com/compose/install/

# 下载
curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

# 赋予执行权限
chmod +x /usr/local/bin/docker-compose

# 映射执行路径
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

开放2357

在java中开发微服务的应用程序,一般都会使用Docker来部署,但在开发的同时,我们需要将开发的程序打包,这时候就需要直接连接Docker服务,然而Docker是不允许外部直接连接的,这时候我们就需要开启2357端口来暴露Docker服务。

你可以修改Docker的守护,来达到该目的。

vim /lib/systemd/system/docker.service

# 修改ExecStart为如下
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

# 重载
systemctl daemon-reload
systemctl restart docker

# 开启防火墙
firewall-cmd --zone=public --add-port=2357/tcp --permanent
Docker

Harbor 安装部署

官方发布地址:https://github.com/goharbor/harbor/releases
程序版本依赖:docker 17.03.0-ce+ and docker-compose 1.18.0+ .

Harbor支持在线安装及离线安装,此文章采用在线离线安装的形式,且安装版本为1.8.0

一、下载安装程序

# 下载
wget https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.0.tgz

# 解压
tar xvf harbor-offline-installer-v1.8.0.tgz

二、配置

配置参数位于文件harbor.yml中

以下是我的配置,可根据自己的需求设定。

这里的https证书是我在腾讯云申请的免费SSL证书,你如果在腾讯云注册有域名也可以在这里 https://console.cloud.tencent.com/ssl 直接申请,当然你也可以使用免费证书的申请。

如下证书使用的是腾讯云申请的 DV SSL证书(Domain Validation SSL),申请后大概一小时会通过邮件得到信息,将申请到的证书下载下来,使用Nginx包内的Crt及Key文件即可。

hostname: hub.youvigo.com

# https related config
https:
  port: 443
  certificate: /data/cert/server.crt
  private_key: /data/cert/server.key

harbor_admin_password: youpassword

# The default data volume
data_volume: /data/harbor/data

三、安装

./install