请教老师,我们在BOS里制作了一个日志表单,这个表单只有列表和查看权限,
所有数据是在操作其他表单时,通过插件写入日志的。
但在调用中会报错,如下
保存代码如下
研究后发现,是表单的保存按钮设置了“不可用”,只要在菜单里改为可用,这个功能就可以执行了。
想问下老师,前端的菜单权限怎么会影响到后端调用呢?
我们有十几个测试账套,这样的话,就都要处理 一遍了,虽然可以SQL执行更新,但感觉这个是不有别的办法可以规避呢?
日志保存代码
public static void WriteToLogVoucher(Context ctx, string FBillNo, string strK3BillNo, string strDescription, bool AutoRun = false)
{
//准备一个数据包DynamicObject
FormMetadata meta = MetaDataServiceHelper.Load(ctx, "NK_RZ") as FormMetadata;
BusinessInfo info = meta.BusinessInfo;
//如果有单据编号,直接编辑,如果没有,新增
string strFilter = string.Format(" FBillNo='{0}' ", FBillNo);
OQLFilter ofilter1 = OQLFilter.CreateHeadEntityFilter(strFilter);
DynamicObject[] dyLogers = BusinessDataServiceHelper.Load(ctx, info, null, ofilter1);
DynamicObject dyLoger; bool bAddNew = false;
if (dyLogers.Count() > 0)
{
dyLoger = dyLogers[0];
bAddNew = false;
}
else
{
dyLoger = new DynamicObject(info.GetDynamicObjectType());
bAddNew = true;
}
//方法二:取具体字段的动态实体属性,然后赋值
info.GetField("FBillNo").DynamicProperty.SetValue(dyLoger, FBillNo);
info.GetField("FPARAMETER").DynamicProperty.SetValue(dyLoger, "");
if (ctx.UserId != 0) (info.GetField("FUSER") as BaseDataField).RefIDDynamicProperty.SetValue(dyLoger, ctx.UserId);
OperateOption saveOption = OperateOption.Create();
saveOption.SetIgnoreWarning(true);
//saveOption.SetIgnoreWarning(.Option.GetIgnoreWarning());
//saveOption.SetInteractionFlag(this.Option.GetInteractionFlag());
//saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
ISaveService saveService = ServiceHelper.GetService
IOperationResult saveResult = saveService.Save(ctx, meta.BusinessInfo, new DynamicObject[] { dyLoger }, saveOption, "Save");
//DynamicObject[] obj = BusinessDataServiceHelper.Save(ctx, meta.BusinessInfo, new DynamicObject[] { dyLoger }, "Save");
return;
}
推荐阅读