创建物料的DynamicObject数据包并保存原创
金蝶云社区-抚琴弹唱
抚琴弹唱
13人赞赏了该文章 1,720次浏览 未经作者许可,禁止转载编辑于2021年12月21日 19:32:59

下面的代码演示了如何在表单插件创建一个新物料,并保存。

/// <summary>
/// 创建DynamicOjbect数据包并保存
/// </summary>
private void SaveMaterial()
{
    var materailMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, "BD_MATERIAL");
    DynamicObject dynObj = new DynamicObject(materailMetadata.BusinessInfo.GetDynamicObjectType());
    dynObj["Number"] = "materail01";
    dynObj["Name"] = new LocaleValue("物料名称01");
    dynObj["DocumentStatus"] = "A";// 数据状态
    dynObj["ForbidStatus"] = "A";// 禁用状态
    SetBasedataValue(materailMetadata.BusinessInfo, "FBaseUnitId", dynObj, 10087);//基本单位
    SetBasedataValue(materailMetadata.BusinessInfo, "FCreateOrgId", dynObj, 100001);//创建组织
    SetBasedataValue(materailMetadata.BusinessInfo, "FUseOrgId", dynObj, 100001);//使用组织
    SetBasedataValue(materailMetadata.BusinessInfo, "FCreatorId", dynObj, 16394);//创建人
    SetBasedataValue(materailMetadata.BusinessInfo, "FModifierId", dynObj, 16394);//修改人
    var now = TimeServiceHelper.GetSystemDateTime(this.Context);
    dynObj["CreateDate"] = now;// 创建时间
    dynObj["ModifyDate"] = now;// 修改时间
    BusinessDataServiceHelper.Save(this.Context, dynObj);
}

/// <summary>
/// 设置基础资料字段
/// </summary>
/// <param name="baseDataFieldKey">基础资料字段Key:FBaseUnitId</param>
/// <param name="baseDataFieldValue">基础资料字段主键值:10087</param>
private void SetBasedataValue(BusinessInfo bizInfo, string baseDataFieldKey,DynamicObject dynObj, object baseDataFieldValue)
{
    BaseDataField bdField = bizInfo.GetField(baseDataFieldKey) as BaseDataField;
    DynamicObject[] bdObjs = BusinessDataServiceHelper.LoadFromCache(this.Context, new object[] { baseDataFieldValue }, bdField.RefFormDynamicObjectType);
    if (bdField.Entity is Kingdee.BOS.Core.Metadata.EntityElement.SubHeadEntity)
    {
        var subData = dynObj[bdField.Entity.EntryName] as DynamicObjectCollection;
        if (subData.Count == 0)
        {
            subData.Add(new DynamicObject(bdField.Entity.DynamicObjectType));
        }
        bdField.RefIDDynamicProperty.SetValue(subData[0], baseDataFieldValue);
        bdField.DynamicProperty.SetValue(subData[0], bdObjs[0]);
    }
    else
    {
        bdField.RefIDDynamicProperty.SetValue(dynObj, baseDataFieldValue);
        bdField.DynamicProperty.SetValue(dynObj, bdObjs[0]);
    }
}


赞 13