【笔记分享】快速构建WebApi的Json格式数据来实现保存,查看,提交,审核...原创
金蝶云社区-dap
dap
8人赞赏了该文章 1,366次浏览 未经作者许可,禁止转载编辑于2020年09月29日 17:57:08
在调用WebApi接口时,往往需要构建JObject来实现业务操作(保存,查看,删除...),最近了解到可以动态获取到
WebApi的Json数据。代码由下:

// 获取保存Json
var saveStr = BuildUploadObj();
// 转成JObject
var saveObj = JObject.Parse(saveStr);
// 获取Model
var modelObj = saveObj["Model"];
// 设值
modelObj["FNumber"] = "testNumber";
modelObj["FName"] = "testName";

var client = new K3CloudApiClient("http://127.0.0.1/K3Cloud/");
var loginResult = client.ValidateLogin("123456", "Administrator", "888888", 2052);
var resultType = JObject.Parse(loginResult)["LoginResultType"].Value<int>();

    if (resultType == 1)
{
    client.Save("BD_MATERIAL", saveObj.ToString());
}

// 获取Json的方法类
private static string BuildUploadObj()
{
    // SaveDesigner为保存操作的设计组件,其他操作请查询T_MDL_FormOperationType 表格
    var designerClass = "Kingdee.BOS.Bill.OperationService.SaveDesign,Kingdee.BOS.Business.Bill";
    var designType = TypesContainer.GetOrRegister(designerClass);
    var designer = Activator.CreateInstance(designType) as OperationWebServiceDesigner;
    designer.OperationId = "Save";
    designer.IsWebApi = true;


    var meta = FormMetaDataCache.GetCachedFormMetaData(new Context(), "BD_MATERIAL");
    var model = designer.CreateServiceModel(new Context(), meta, null) as FormServiceModel;


    // WebApiParamHelper 为内部封装WebApi帮助类,没有对外发布,需要用发射调用获取JSON
    var webApiHelperClass =
        "Kingdee.BOS.Business.PlugIn.DynamicService.WebApiParamHelper,Kingdee.BOS.Business.PlugIn";
    var webApiHelperType = TypesContainer.GetOrRegister(webApiHelperClass);
    var webApiHelper = Activator.CreateInstance(webApiHelperType);
    var getJsonData = webApiHelperType.GetMethod("GetJSONData", new Type[] {typeof(DTOType), typeof(Boolean)});
    return getJsonData?.Invoke(webApiHelper, new object[] {model?.RequestDTOType, true}).GetString();
}


赞 8