金蝶云星空使用WebAPI来新增单据
有很多客户需求在后台自动生成某张单据,金蝶云星空提供了WebApi,包含了保存,提交,审核,删除单据的接口,下面以生产订单的保存,提交,审核为例,说明一下应用WebApi后台自动生成生产订单的功能,下面是代码示例,其他单据可以根据示例代码做相应的修改:
using Kingdee.BOS.Core.Bill.PlugIn;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS;
using Kingdee.BOS.Core.Bill;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.DynamicForm.PlugIn.ControlModel;
using Kingdee.BOS.Core.List;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.ControlElement;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Resource;
using Kingdee.BOS.Util;
//using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Core.Msg;
using Kingdee.BOS.Orm.Drivers;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.DataEntity;
using System.ComponentModel;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using System.Data;
using Newtonsoft.Json.Linq;
using Kingdee.BOS.WebApi.Client;
using Newtonsoft.Json;
public class DisProOrder : AbstractBillPlugIn
{
K3CloudApiClient client = new K3CloudApiClient("http://X.X.X.X:XXX/K3Cloud/");//参数是K3/Cloud的URL
//传入的参数根据需求来自行修改
public void SaveBill(DataSet ds, string OrderQty, string TouLiaoQty,int billno)
{
DataSet dstemp = new DataSet();
DataTable dtTemp = new DataTable();
string result = "";
if (ds.Tables.Count > 0)
{
if (ds.Tables[0].Rows.Count == 0)
{
}
else
{
#region 保存生产订单信息
try
{
// 开始构建Web API参数对象
// 参数根对象:包含Creator、NeedUpDateFields、Model这三个子参数
// using Newtonsoft.Json.Linq; // (需引用Newtonsoft.Json.dll)
JObject jsonRoot = new JObject();
// Creator: 创建用户
jsonRoot.Add("CREATOR", "administrator");
// NeedUpDateFields: 哪些字段需要更新?为空则表示参数中全部字段,均需要更新
jsonRoot.Add("NEEDUPDATEFIELDS", new JArray(""));
jsonRoot.Add("NEEDRETURNFIELDS", new JArray(""));
jsonRoot.Add("ISDELETEENTRY", "TRUE");
jsonRoot.Add("SUBSYSTEMID", "");
// Model: 单据详细数据参数
JObject model = new JObject();
jsonRoot.Add("Model", model);
// 开始设置单据字段值
// 必须设置的字段:主键、单据类型、主业务组织,各必录且没有设置默认值的字段
// 特别注意:字段Key大小写是敏感的,建议从BOS设计器中,直接复制字段的标识属性过来
// 单据主键:必须填写,系统据此判断是新增还是修改单据;新增单据,填0
model.Add("FID", "0");
JObject basedata = new JObject();
//单据编号
model.Add("FBillNo", this.View.Model.GetValue("FBillNo").ToString()+billno.ToString("000"));
//单据类型
if (this.View.Model.GetValue("FBillType").ToString() != "")
{
basedata = new JObject();
DynamicObject BillType = this.View.Model.GetValue("FBillType") as DynamicObject;
string BillTypeNO = BillType["number"].ToString();
basedata.Add("FNumber", BillTypeNO);
model.Add("FBillType", basedata);
}
//单据日期
model.Add("FDate", this.View.Model.GetValue("FDate").ToString());
//生产组织
if (this.View.Model.GetValue("FPrdOrgId").ToString() != "")
{
basedata = new JObject();
DynamicObject FPrdOrg = this.View.Model.GetValue("FPrdOrgId") as DynamicObject;
string FPrdOrgNO = FPrdOrg["number"].ToString();
basedata.Add("FNumber", FPrdOrgNO);
model.Add("FPrdOrgId", basedata);
}
//计划组:FWorkGroupId
if (ds.Tables[0].Rows[0]["FWORKGROUPID"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FWorkGroup = this.View.Model.GetValue("FWorkGroupId") as DynamicObject;
string FWorkGroupNO = FWorkGroup["number"].ToString();
basedata.Add("FNumber", FWorkGroupNO);
model.Add("FWorkGroupId", basedata);
}
//计划员:FPlannerID
if (ds.Tables[0].Rows[0]["FPLANNERID"].ToString() !="0")
{
basedata = new JObject();
DynamicObject FPlanner = this.View.Model.GetValue("FPlannerID") as DynamicObject;
string FPlannerNO = FPlanner["number"].ToString();
basedata.Add("FNumber", FPlannerNO);
model.Add("FPlannerID", basedata);
}
//备注
model.Add("FDescription", "");
//拆单数:F_PAEZ_CHAIDAN
model.Add("F_PAEZ_CHAIDAN", this.View.Model.GetValue("F_PAEZ_CHAIDAN").ToString());
//本单数:F_PAEZ_BENDAN
model.Add("F_PAEZ_BENDAN", OrderQty);
//原单数:F_PAEZ_YUANDAN
model.Add("F_PAEZ_YUANDAN", this.View.Model.GetValue("F_PAEZ_YUANDAN").ToString());
//投料数:F_PAEZ_TOULIAO
model.Add("F_PAEZ_TOULIAO", TouLiaoQty);
//是否已拆单:F_PAEZ_Text
model.Add("F_PAEZ_Text", "是");
// 单据类型:必须填写,是基础资料字段
// 基础资料类型字段填值,必须再构建一个JObject对象,设置基础资料编码
// 单据编号:可以忽略,由系统根据编码规则自动生成
//model.Add("FBILLNO", "201602160001");
// 开始构建单据体参数:集合参数JArray
JArray entryRows = new JArray();
// 把单据体行集合,添加到model中,以单据体Key为标识
string entityKey = "FTreeEntity";//单据体的标识
model.Add(entityKey, entryRows);
int rowscount;
rowscount = Convert.ToInt32(this.Model.GetEntryRowCount("FTreeEntity"));
// 通过循环创建单据体行:
for (int i = 0; i <= rowscount - 1; i++)
{
// 添加新行,把新行加入到单据体行集合
JObject entryRow = new JObject();
entryRows.Add(entryRow);
// 给新行,设置关键字段值
// 单据体主键:必须填写,系统据此判断是新增还是修改行
entryRow.Add("FEntryID", "0");
//产品类型:FProductType
entryRow.Add("FProductType", "");
//物料:基础资料,填写编码
DynamicObject Mat = this.View.Model.GetValue("FMaterialId", i) as DynamicObject;
string MatNO = Mat["number"].ToString();
//dtTemp = GetMaterialInfo(MatId);
basedata = new JObject();
basedata.Add("FNumber", MatNO);
entryRow.Add("FMaterialId", basedata);
//生产车间:FWorkShopID
if (ds.Tables[0].Rows[0]["FWORKSHOPID"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FWorkShop = this.View.Model.GetValue("FWorkShopID", i) as DynamicObject;
string FWorkShopNO = FWorkShop["number"].ToString();
basedata.Add("FNumber", FWorkShopNO);
entryRow.Add("FWorkShopID", basedata);
}
单位,基础资料,填写编码
if (ds.Tables[0].Rows[0]["FUnitId"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FUnit = this.View.Model.GetValue("FUnitId", i) as DynamicObject;
string FUnitNO = FUnit["number"].ToString();
basedata.Add("FNumber", FUnitNO);
entryRow.Add("FUnitId", basedata);
}
//数量:FQty
entryRow.Add("FQty", OrderQty);
//计划开工时间:FPlanStartDate (必填项)
entryRow.Add("FPlanStartDate", this.View.Model.GetValue("FPlanStartDate", i).ToString());
//计划完工时间:FPlanFinishDate (必填项)
entryRow.Add("FPlanFinishDate", this.View.Model.GetValue("FPlanFinishDate", i).ToString());
//BOM版本:FBomId
if (ds.Tables[0].Rows[0]["FBomId"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FBom = this.View.Model.GetValue("FBomId", i) as DynamicObject;
string FBomNO = FBom["number"].ToString();
basedata.Add("FNumber", FBomNO);
entryRow.Add("FBomId", basedata);
}
//批号:FLot
//basedata = new JObject();
//basedata.Add("FNumber", "");
//entryRow.Add("FLot", basedata);
//备注:FMemoItem
entryRow.Add("FMemoItem", "");
//工艺路线:FRoutingId
if (ds.Tables[0].Rows[0]["FRoutingId"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FRouting = this.View.Model.GetValue("FRoutingId") as DynamicObject;
string FRoutingNO = FRouting["number"].ToString();
basedata.Add("FNumber", FRoutingNO);
entryRow.Add("FRoutingId", basedata);
}
//仓库:FStockId
if (ds.Tables[0].Rows[0]["FStockId"].ToString() != "0")
{
basedata = new JObject();
DynamicObject FStock = this.View.Model.GetValue("FStockId") as DynamicObject;
string FStockNO = FStock["number"].ToString();
basedata.Add("FNumber", FStockNO);
entryRow.Add("FStockId", basedata);
}
创建Link行集合
//JArray linkRows = new JArray();
添加到单据体行中:Link子单据体标识 = 关联主单据体标识(POOrderEntry) + _Link
//string linkEntityKey = string.Format("{0}_Link", entityKey);
//entryRow.Add(linkEntityKey, linkRows);
创建Link行:
如有多条源单行,则分别创建Link行记录各条源单行信息
//JObject linkRow = new JObject();
//linkRows.Add(linkRow);
填写Link行上的字段值
特别说明:Link子单据体上字段的标识,必须在前面增加子单据体标识
FFlowId : 业务流程图,可选
//string fldFlowIdKey = string.Format("{0}_FFlowId", linkEntityKey);
//linkRow.Add(fldFlowIdKey, "");
FFlowLineId :业务流程图路线,可选
//string fldFlowLineIdKey = string.Format("{0}_FFlowLineId", linkEntityKey);
//linkRow.Add(fldFlowLineIdKey, "");
FRuleId :两单之间的转换规则内码,必填
可以通过如下SQL语句到数据库获取
select FID, *
from T_META_CONVERTRULE
where FSOURCEFORMID = 'PUR_Requisition'
and FTARGETFORMID = 'PUR_PurchaseOrder'
and FDEVTYPE = 0;
//string fldRuleIdKey = string.Format("{0}_FRuleId", linkEntityKey);
//linkRow.Add(fldRuleIdKey, "605a20be-79f9-4e86-b87c-08fa9dfa98f4");
FSTableName :必填,源单单据体表格编码,通过如下语句获取:
SELECT FTableNumber
FROM t_bf_tabledefine
WHERE fformid = 'PUR_Requisition'
AND fentitykey = 'FEntity'
如果如上语句未返回结果,请到K/3 Cloud中,手工选单一次,后台会自动产生表格编码
//string fldSTableNameKey = string.Format("{0}_FSTableName", linkEntityKey);
//linkRow.Add(fldSTableNameKey, "t_Dev_PUR_ReceiveEntry");
通过收料单号获取收料单内码和单据体分录内码
//string BillNo = ds.Tables["InStockMatInfo"].Rows[i]["F_DEV_SOURCEBILLNO"].ToString();
//string MatId = ds.Tables["InStockMatInfo"].Rows[i]["F_DEV_MATID"].ToString();
//string StockId = ds.Tables["InStockMatInfo"].Rows[i]["F_Dev_StockID"].ToString();
//string Position = ds.Tables["InStockMatInfo"].Rows[i]["F_Dev_Position"].ToString();
//dtTemp = GetData.GetReceiveInfo(BillNo, MatId, StockId, Position);
FSBillId :必填,源单单据内码
//string fldSBillIdKey = string.Format("{0}_FSBillId", linkEntityKey);
//linkRow.Add(fldSBillIdKey, dtTemp.Rows[0]["FID"].ToString());
FSId : 必填,源单单据体行内码。如果源单主关联实体是单据头,则此属性也填写源单单据内码
//string fldSIdKey = string.Format("{0}_FSId", linkEntityKey);
//linkRow.Add(fldSIdKey, dtTemp.Rows[0]["FEntryID"].ToString());
// FEntity_Link_FBaseQty :数量实际携带值,下推后,用户可以手工修改数量值;此字段存储最终的数量值
// 可选字段:
// 在保存时,系统会自动把单据体上数量值,更新到此字段;因此,这个字段可以不用填写(即使填写了,也会被覆盖)
string fldBaseQtyKey = string.Format("{0}_FBaseUnitQty", linkEntityKey);
linkRow.Add(fldBaseQtyKey, 10);
}
//return jsonRoot.ToString();
// 调用Web API接口服务,保存采购订单
result = Save("PRD_MO", jsonRoot.ToString());
//result = client.Execute<string>(
// "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save",
// new object[] { "Dev_STK_InStock", jsonRoot.ToString() });
try
{
JObject jo = (JObject)JsonConvert.DeserializeObject(result);
string number = jo["Result"]["Number"].ToString();
//if (number != "")
//{
// string autrjson = "{\"CreateOrgId\":0,\"Numbers\":[\"" + number + "\"]}";
// result = Common.Audit("Dev_STK_InStock", autrjson);
//}
}
catch (Exception exp)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("程序运行遇到了未知的错误:");
sb.Append("错误提示:").AppendLine(exp.Message);
sb.Append("错误堆栈:").AppendLine(exp.StackTrace);
throw new Exception(sb.ToString() + result.ToString());
//throw new Exception(result);
}
}
catch (Exception exp)
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("程序运行遇到了未知的错误:");
sb.Append("错误提示:").AppendLine(exp.Message);
sb.Append("错误堆栈:").AppendLine(exp.StackTrace);
throw new Exception(sb.ToString() + result.ToString());
}
#endregion
}
}
}
/// <summary>
/// 登录
/// </summary>
/// <returns></returns>
public bool Login()
{
string dbid = "5b59aae46cb7b1";//DBID,select FDATACENTERID from T_BAS_DATACENTER 在管理中心数据库中执行,可查到账套的DBID
string username = "administrator";//账套用户名
string password = "888888";//账套用户名密码
var loginResult = client.Login(
dbid,
username,
password,
2052);
return loginResult;
//return true;
}
//保存接口
public string Save(string formid, string jsonstr)
{
string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!";
//string result = "";
if (Login())
{
//result = client.Execute<string>(
// "Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Save",
// new object[] { formid, jsonstr });
result = client.Save(formid, jsonstr);
}
return result;
}
/// <summary>
/// 审核
/// </summary>
/// <param name="formid"></param>
/// <param name="jsonstr"></param>
/// <returns></returns>
public static string Audit(string formid, string jsonstr)
{
string result = "登录失败,请检查与站点地址、数据中心Id,用户名及密码!";
result = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Submit", new object[] { formid, jsonstr });
result = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.Audit", new object[] { formid, jsonstr });
return result;
}
}
转载于:https://www.cnblogs.com/zfangfang/p/9982364.html
金蝶云星空使用WebAPI来新增单据相关推荐
- python搭建webapi_Python 版本--金蝶云星空新版WebAPI SDK--新手快速入门指南
/******************************************************************************** ** 名称: Python版本--金 ...
- 金蝶云星空和积加ERP单据接口对接
金蝶云星空和积加ERP单据接口对接 接通系统:积加ERP 深圳市积加跨境网络科技有限公司,是国内跨境电商数字基础设施服务商,为跨境精品卖家提供全闭环的电商解决方案.积加致力于让入门级卖家成长,中大型卖 ...
- java调用金蝶云接口_JAVA 版本--金蝶云星空新版WebAPI SDK--新手快速入门指南
/******************************************************************************** ** 名称: JAVA 版本--金蝶 ...
- 云星空计算机名访问不可以,03.PLM系统访问金蝶云星空(webapi):读取基础资料编码、名称...
1. 需求描述 PLM系统中的物料,BOM同步到金蝶云星空系统中时,构造的json数据中,一些基础资料字段需要传递编码,而不是名称. 本接口提供获取所有基础资料的编码.名称,可作为PLM系统中的对照关 ...
- 金蝶云php webapi,金蝶云星空(WebApi集成方式):免密码登录接口
免密码登录方式 首先在金蝶云星空进行第三方登录授权. 第三方系统登录授权 登录接口定义: /// 第三方系统登录授权 /// 数据中心ID /// 用户名称 /// 第三方系统应用Id /// 第三方 ...
- 使用金蝶云星空集成开发平台创建单据的操作步骤
打开<金蝶云星空集成开发平台>,输入自己的账户和钥匙登录到开发板块. 点击<打开>,可以看到<系统视图>窗口.创建一个<业务领域>,一个业务领域下,可以 ...
- 金蝶云星空之WebAPI开发(Android)----登录
记录一下开发过程遇到的坑.因为金蝶云在webapi开发能查阅到的资料少之又少,java有些SDK包用不了,或者版本不兼容等各种问题.故再此记录一下用okhttp的方法来调用api接口. 目录 一.事前 ...
- 纷享销客对接打通金蝶云星空查询对接接口(自定义)接口与物料新增接口
接入系统:纷享销客 纷享销客以连接型CRM为特色,连接业务,连接人,连接系统,实现以客户为中心,企业内部和上下游业务的高效协作.纷享销客坚持行业化战略,为高科技.现代企业服务.快消.农牧.大制造等行业 ...
- 金蝶云星空和小满OKKICRM单据接口对接
源系统:小满OKKICRM 小满科技成立于2013年,是阿里巴巴集团战略投资的高新技术企业.小满科技以"人工智能+大数据"为核心驱动力,为外贸企业提供智能CRM解决方案.公司旗下的 ...
最新文章
- MySQL面试题 | 附答案解析(十七)
- PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组EC、通路、KO(200806更新)
- php滑动换视频,php工具类之【视频变换类】
- python 反爬取数据
- Linux驱动技术(三) _DMA编程
- 【直播预告】计算机视觉中数据增强原理和实践
- wxWidgets:wxDirTraverser类用法
- 转载---设计模式分类
- [css] margin和padding使用的场景有哪些?
- Uvaoj10054 - The Necklace
- 主攻计算机专业英语翻译,湖师大“博导”黄振定,主攻“翻译学”
- BZOJ1787 Meet紧急集合
- cdh用户权限_CDH6.3.2之Sentry权限管理(三)
- 开启Accessibility的快捷方式-3次home键或者侧边键
- 永磁同步电机的原理介绍
- 阿里巴巴中台战略--事务与柔性事务
- Qt报错:qt.qpa.xcb: QXcbConnection: XCB error: 8 (BadMatch).....
- NCH ClickCharts(流程图绘制软件)v4.10 汉化免费版
- php 展示微信图片尺寸,微信公众平台图片最大尺寸
- 【LeetCode】75. Sort Colors(颜色排序)-C++实现的两种方法及超详细图解
热门文章
- 大数据批处理框架Spring Batch 的全面解析
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
- Linux常用的服务器构建
- thinkphp3.2加载第三方函数库
- php课程---JavaScript与Jquery的区别(转)
- jetbrick-template 和其他模板的性能测试比较
- 使用WIM格式进行WES 7 (windows embedded standard )的安装
- IBM软件三大发力点推进“软”实力着陆中国
- 软件测试 学习之路 基本介绍
- Java常用接口与类——Date、Calendar、DateFormat、TimeZone(日期相关)