代码调用单据保存服务,还要按钮有可用权限吗?
金蝶云社区-nmgzjf
nmgzjf
0人赞赏了该文章 957次浏览 未经作者许可,禁止转载编辑于2016年05月28日 15:55:45

请教老师,我们在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;
}