如何通过会话对象检测Quickbooks版本?C# SDK集成适配需求
检测QuickBooks版本以适配计量单位字段(C# + QB SDK 13.0)
当然可以解决这个问题!QB SDK 13.0完全支持从会话对象中获取当前连接的QuickBooks版本信息,这样你就能精准判断用户的版本类型,动态调整字段配置,彻底避免因版本差异触发的错误。
1. 从会话对象获取版本详情
你可以通过QBSessionManager的CompanyFile属性直接拿到当前连接的QuickBooks版本信息——其中Product属性会返回完整的版本类型(比如"QuickBooks Pro 2023"、"QuickBooks Premier 2022"),Version属性则会返回具体的年份版本号。
代码示例
using QBFC13Lib; public string GetQBVersionInfo(QBSessionManager session) { // 确保会话已成功连接到公司文件 if (session.CompanyFile == null) throw new InvalidOperationException("未连接到QuickBooks公司文件"); string productType = session.CompanyFile.Product; string versionYear = session.CompanyFile.Version; return $"当前QuickBooks版本:{productType}(版本号:{versionYear})"; }
2. 判断是否需要包含计量单位字段
拿到版本信息后,通过字符串匹配就能快速区分Pro和Premier版本,进而决定是否添加Unit of Measure字段:
public bool IsPremierVersion(QBSessionManager session) { string productName = session.CompanyFile.Product; // 用不区分大小写的匹配兼容不同年份版本的命名格式 return productName.Contains("Premier", StringComparison.OrdinalIgnoreCase); }
3. 动态调整项目创建逻辑
在创建项目时,根据上面的判断结果动态控制字段的添加:
public void CreateInventoryItem(QBSessionManager session, string itemName, string uom = null) { bool needUOM = IsPremierVersion(session); IMsgSetRequest request = session.CreateMsgSetRequest("US", 13, 0); IItemInventoryAdd itemAddReq = request.AppendItemInventoryAddRq(); // 必填字段配置 itemAddReq.Name.SetValue(itemName); itemAddReq.IncomeAccountRef.FullName.SetValue("销售收入"); // 其他必填字段... // 仅在Premier版本下添加计量单位字段 if (needUOM && !string.IsNullOrEmpty(uom)) { itemAddReq.UnitOfMeasure.SetValue(uom); } // 发送请求并处理响应 IMsgSetResponse response = session.DoRequests(request); // 响应校验逻辑... }
额外提示
- 务必确保会话已经成功连接到QuickBooks公司文件,否则
CompanyFile属性会为空,触发空引用异常。 - 不同年份的QB版本可能会有细微的命名差异(比如"QuickBooks Premier Accountant Edition"),用不区分大小写的包含匹配可以兼容这些情况。
- 如果后续需要适配Enterprise等其他版本,也可以用同样的逻辑扩展判断条件。
内容的提问来源于stack exchange,提问作者Rani Radcliff
相关产品推荐
相关产品推荐

