
【常见问题】选单报错 OrmLocaleValue 转换到 Int64 失败

原因:选单时会对数据包做基础资料引用加载,会检测整个单据数据包,用到基础资料的部分都会取缓存;当基础资料数据包异常时就会出现这个问题,
异常的原因通常为 基础资料数据包和引用字段不匹配导致
【问题演示和修正的代码处理逻辑】
```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
namespace DynamicFormPlugIn.Test
{
[Kingdee.BOS.Util.HotUpdate]
public class TestFormPlugIn_DrawError : AbstractBillPlugIn
{
public override void BarItemClick(BarItemClickEventArgs e)
{
if (string.Equals(e.BarItemKey, "tb_SelectBaseError", StringComparison.OrdinalIgnoreCase))
{
ResetBaseDataError();
}
else if(string.Equals(e.BarItemKey, "tb_SelectBaseTrue", StringComparison.OrdinalIgnoreCase))
{
ResetBaseDataTrue();
}
}
public string fieldKey = "F_BHR_Base_qtr";
public object pkId = 135705;
/// <summary>
/// 异常的基础资料数据包赋值
/// </summary>
public void ResetBaseDataError()
{
var billDataObj = this.Model.DataObject;
var field = this.View.BillBusinessInfo.GetField(fieldKey) as Kingdee.BOS.Core.Metadata.FieldElement.BaseDataField;
View.Model.SetValue(fieldKey, null);
//获取全量元数据的数据包
var baseDataFormMeta = Kingdee.BOS.ServiceHelper.MetaDataServiceHelper.Load(this.Context, "BD_Stock") as Kingdee.BOS.Core.Metadata.FormMetadata;
var baseDataObj = GetBaseData(pkId, baseDataFormMeta.BusinessInfo.GetDynamicObjectType());