调用c4ws可被这个companySpecified害惨了

事情是这样的,一个老系统,用.NET的WebSite的模式开发的,其中用于调用Infor ERP LN的Web Services(SOAP)的方法,动态的传递company这个参数,C4WS后端始终读取到默认的公司。

这种WebReference的方式我以前没用过,都是自动拼装XML来调用C4WS的。一开始用了很多办法记录日志,想要知道到底传到后端的XML中的company是什么,到最后终于看到并没有传递正确的company,这才去找哪里控制的,终于注意到这里的companySpecified,默认值没有,但是一直是false。手动设置为true就解决了。

微软Windows 11虚拟机免激活截止2023年3月5日

Windows 11开发环境2212现在可以同时提供给四个虚拟化环境,您可以为VMWare、第二代Hyper-V、VirtualBox和Parallels直接提供免费的Windows 11虚拟机镜像。

来自微软的官方Windows 11虚拟机重约20GB,包括以下工具:

  • Windows 11企业版SKU(评估)
  • Visual Studio 2022社区版,启用了UWP、.NET桌面、Azure和用于C#工作负载的Windows App SDK
  • 启用了Windows Subsystem for Linux 2,并安装了Ubuntu
  • 安装了Windows终端
  • 启用了开发者模式

这次虚拟机镜像在2023年3月5日之前免费使用,且无需激活。在此之后,Windows 11将要求你输入一个正版的许可证密钥,以继续使用虚拟机。您仍然可以使用Windows 7的密钥来激活Windows 11,免费工具有很多,自己找。

下载地址:https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/

.NET Framework WebAPI中使用Swashbuckle启用 Swagger example responses(Inline Model)

尽管.NET Core新版本的WebAPI中可以直接从XML中读取出要输出的Swagger相应示例,但我还在使用老的.net framework,那么怎么增加Inline Model的示例输出呢?

首先说明,我现在的API都是统一输出成HttpResponseMessage,截图如下:

如果您也是使用这种方式,或者使用async Task<HttpResponseMessage>的返回方式,都可以参考本文的方法,增加输出的响应值类型和示例。

先引用:using Swashbuckle.Swagger.Annotations;,然后在Controller的方法上增加如下注解。

[SwaggerResponse(HttpStatusCode.OK, Type=typeof(IEnumerable<Country>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(MyExamples))]
[SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(IEnumerable<ErrorResource>))]

然后这里的写我们的示例代码:

public class MyExamples : IExamplesProvider
{
    public object GetExamples()
    {
        return new List<Country>
        {
            new Country { Code = "CN", Name = "China" },
            new Country { Code = "US", Name = "American" }
        };
    }
}

最后别忘了SwaggerConfig中开启ExamplesOperationFilter

c.OperationFilter<ExamplesOperationFilter>();

好了,最后看下真实输出效果。因为我偷懒,没用写Example Value,只放了数据类型Inline Model。

金蝶云星空(K3Cloud)中的核算维度

朋友公司在用金蝶云星空,他需要将凭证数据通过OpenAPI的方式下载到本地数据库,以便后续的一些业务分析,这个下载的接口对接起来挺方便的,轮训自增Id(作为凭证号)去获取每个凭证的数据和分录。其中有用到核算维度,这个概念跟Infor LN ERP财务模块中的Dimensions是同样的概念。

以下金蝶运行接截图均来自网络

01015b97af3420464cd0bef3eea136410df0.png

自定义核算维度后,关联到科目,并指定是否是必填。

C# .NET中除法结果的精度是根据(被)除数来决定的!

2022年5月25日补充如下:

精度不是根据除数决定,而是除数和被除数任何一个。截图如下:

再次感谢码农很忙的提醒,这里还是功力不够,未充分动手,结论不严谨。

这已经是第二次碰到了,以前自己写遇到过,知道怎么避坑。

这次分配给一个小朋友去写这段程序,就出问题了。

比方说:45/100=0.45,但是如果这个100是int类型,返回值就是0.

那么必须将分母根据实际需要转换为所需的精度类型,如decimal或float/double。

再次强调一遍:C# .NET中除法结果的精度是根据被除数来决定的!

Flowportal BPM实战开发参考流程

今天我要分享的不是有关技术的开发流程,而是一个流程需求从提出到完成并上线的流程。

这个流程是我在用的,也曾经给2位美国的同事、2位印度的同事培训过,这次要分享的是一位非常优秀的美国同事所整理的英文版。

说实话,没有对比没有伤害。以前培训过的2个印度人,技术基础其实都很强的,但根本不用心,所以最后都没能胜任。

而整理这个图的同事,非常用心,并且很积极主动的去学,把学到的自己消化、实战、总结,最后自己技能提升,并做到了青出于蓝而胜于蓝。

大家看看这些任务分解的清单跟自己目前的流程契合度高吗?

欢迎留言交流。

最后需要感谢她的信任和努力,这是一段想起来就开心的共事经历。

使用SQL模糊查询手动删除WordPress垃圾留言

虽然用了最著名的Akismet 反垃圾评论插件,但是还是会出现几千条垃圾留言。

我已经删除过一次了,我记得大概3000多条,这次又来了近2000条,特点还是来自.ru后缀,也就是俄罗斯的垃圾评论群发软件搞得。

好了,打开phpMyAdmin,登录数据库,点击SQL,粘贴以下SQL,点击执行,搞定!

DELETE FROM `cuiwenyuan_com`.`wp_comments` WHERE `wp_comments`.`comment_author_email` LIKE '%.ru%'

如果还想对内容筛选并自动删除,可以使用如下SQL

DELETE FROM `cuiwenyuan_com`.`wp_comments` WHERE `wp_comments`.`comment_author_email` LIKE '%.ru%' OR `wp_comments`.`comment_content` LIKE '%.ru%'

Bose SoundTouch 27.0.0.3377 for Windows下载地址

距离上一篇《Bose SoundTouch 26.0.0.3251 for Windows下载地址》又快一年了,

老规矩:因为文件较大,请加我微信,注明Bose,微信发下您的邮箱地址,我发给你安装文件。

FILE SIZE/文件大小:112 MB

PC running Windows 7, Windows 8 or Windows 10

一款用于 SoundTouch® Wi-Fi® 音乐系统的免费应用程序
借助 SoundTouch® 应用程序,您可以使用电脑控制 Bose® SoundTouch® 系统。使用该应用程序可收听互联网广播、获得音乐服务或播放您的音乐库。立即开始播放流媒体音乐,或根据您喜欢的音乐内容使用该应用程序对您的系统进行轻松的个性化预设。

Stimulsoft Web版中如何动态修改Json数据源的Url

在Stimulsoft Report(目前我使用的是2022.1.2版本)中,可以支持从JSON文件或者在线URL作为数据源。

当设计完报表之后,一般要连接正式的服务器URL,所以我希望能动态的修改这个URL。

我照着官方示例写了如下代码,虽然能够工作,但我觉得不是很简洁。

// 从Json获取数据        
StiJsonDatabase jsonDatabase = new StiJsonDatabase
{
    Alias = "JSON",
    Key = "",
    Name = "JSON",
    PathData = "myPath?action=ExpenseByStore&CompanyCode=101&CurrentYear=2022"
};
report.Dictionary.Databases.Clear();
report.Dictionary.Databases.Add(jsonDatabase);

后来从官方支持获得如下写法,果然简洁!不得不说Stimulsoft的中文资料太少,这也是我开始在博客写下一些填过坑的原因。

var newUrl = "myPath?action=ExpenseByStore&CompanyCode=101&CurrentYear=2022";
(report.Dictionary.Databases[0] as StiJsonDatabase).PathData = newUrl;

另外呢,今天收到新版的更新通知了,感兴趣的小伙伴可以下载更新了。

U盘克隆/复制/对拷/拷贝工具,不妨试试这款:WinImage

近期有个需求,要从一个U盘对拷出一个完全一样的U盘内容,带一些隐藏文件及系统引导功能。并且U盘的容量有如下两种情况:

1、容量完全一样
2、新U盘的容量大

通过微信群里的兄弟,了解到这款WinImage,官方网站:http://www.winimage.com/download.htm,真得很好用,特别推荐给有类似需要的朋友。

什么是 WinImage?

WinImage 是一个成熟的磁盘映像套件,用于轻松创建、读取和编辑多种映像格式和文件系统,包括 DMF、VHD、FAT、ISO、NTFS 和 Linux。磁盘映像是物理磁盘(软盘、CD-ROM、硬盘、USB、VHD 磁盘等)或保留原始结构的分区的精确副本。使用 WinImage,您可以在硬盘驱动器或其他媒体上重新创建磁盘映像、查看其内容、提取基于映像的文件、添加新文件和目录、更改格式以及对映像进行碎片整理。所有这些以及更多功能都在一个直观的用户界面中提供,该界面可立即实现成像。

该程序在家庭和办公室中有许多实用用途。作为一名认真的 PC 用户,您可能拥有大量旧但仍然有用的软盘。使用 WinImage,您可以将它们转换为磁盘映像,这些映像可以存储在硬盘驱动器上并在需要时重新创建。结合 CD 创建工具,WinImage 可以帮助您创建自己的带有硬件诊断或病毒清除软件的自定义启动盘,使有问题的 PC 备份并运行,而无需在 Windows 中运行。作为硬盘备份方案,WinImage 允许您在经历过硬盘崩溃或软件损坏的机器上恢复系统和配置时节省数小时甚至数天。与家庭和办公室一样,这种能力是培训课程的必备条件,在这种情况下,快速恢复损坏的 PC 配置至关重要。

WinImage 有很多很酷的功能!

从可移动驱动器(如 USB 驱动器)、CD-ROM、软盘、从磁盘映像中提取文件,创建空磁盘映像,
将文件和目录注入现有的磁盘映像中,
更改磁盘映像格式,
对磁盘映像进行碎片整理,
强大的“批处理助手”模式,让你自动化多项操作,
还有很多!

WinImage 使用现代、尖端的 Windows 界面,可用于 Windows 95/98 和 Windows NT/2000/XP/2003 服务器/Windows 7/Windows 10等的英语、法语、德语、意大利语、葡萄牙语和西班牙语、中文等。

WinImage 是一个共享软件程序。

WinImage 是共享软件。您可以在 30 天的试用期内对其进行评估。30 天后,如果您想继续使用 WinImage,您需要注册。单击 此处下载 WinImage