同步数据到外部系统
以仓库同步到腾一为例:
1. 先仓库表添加UD字段,meslog_c,代表是否同步到腾一
2. 查询列表和详情页 添加上这个字段的显示 只读
3. 再接口平台中添加仓库数据推送的接口
控制器 PushDataToTengYiController中添加 Warehse 方法
C# 全选
/// <summary>
/// 推送仓库
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public bool Warehse(List<WarehseInput> input)
{
var warehseCodes = input.Select(x => x.WarehouseCode).Distinct().ToList();
var datas = _db.Queryable<Tables.ErpWarehse>().Where(x => warehseCodes.Contains(x.WarehouseCode)).ToList();
foreach (var item in datas)
{
ToTengYiWarehouseModel mod = new ToTengYiWarehouseModel()
{
Company = item.Company,
WarehouseCode = item.WarehouseCode,
Description = item.Description,
Plant = item.Plant,
InActive = item.Inactive
};
// 更新同步标记
var warehseUD = _db.Queryable<Tables.ErpWarehseUD>().Where(w => w.ForeignSysRowID == item.SysRowID).FirstAsync();
int resutl = _db.Updateable<Tables.ErpWarehseUD>().Where(w => w.ForeignSysRowID == item.SysRowID)
.SetColumns(it => new ErpWarehseUD { MesLog_c = true })
.ExecuteCommand();
}
return true;
}4. 在适当的函数库中新建一个同步函数。
函数库需要引用 ZAPIServer库

新建函数 SendWarehouse
参数信息

内容方法:
C# 全选
var paramData =new {
warehouseCode= this.warehouseCode
};
var paramJson = System.Text.Json.JsonSerializer.Serialize(new []{ paramData });
var urlPath = $"/api/{this.callContextClient.CurrentCompany}/PushDataToTengYi/Warehse";
var result = this.EfxLib.ZAPIServer.Post(urlPath, paramJson);
this.success = result.success;
this.message = result.message;5. 添加一个事件 SyncToTengYi

6. 添加手动同步按钮
Detail中添加同步到腾一按钮

按钮事件
7. 自动同步
自动同步到腾一逻辑主要通过BPM中来实现,
7.1 新增,修改得时候,要把mes_log设置为false
update方法BPM指令

代码:
C# 全选
foreach(var row in ds.Warehse) {
// 新增,修改 滕一同步标记置为false
if(row.RowMod =="A" || row.RowMod =="U") {
row["MesLog_c"] = false;
}
}7.2 删除时,如果已经同步到腾一,需要先从腾一删除,然后再从epicor中删除,腾一如果删除失败,epicor不允许删除
C# 全选
foreach(var row in ds.Warehse) {
// 新增,修改 滕一同步标记置为false
if(row.RowMod =="A" || row.RowMod =="U") {
row["MesLog_c"] = false;
}
if(row.RowMod =="D" && ds.Warehse[0].UDField<System.Boolean>("MesLog_c")==true) {
string functionLibrary = "ZAPIServer";
string function = "Post";
var paramData =new {
warehouseCode= row.WarehouseCode
};
var urlPath = $"/api/{callContextClient.CurrentCompany}/PushDataToTengYi/WarehseDelete";
string jsonStr = System.Text.Json.JsonSerializer.Serialize(new []{ paramData });
try{
var result = (Tuple<System.Boolean, System.String,System.String>)this.InvokeFunction(functionLibrary,function,Tuple.Create(this.ds));
bool success = result.Item1;
string message = result.Item2;
if(!success) {
throw new Ice.Common.BusinessObjectException(new Ice.Common.BusinessObjectMessage("删除滕一发生错误:"+message){
Type=Ice.Common.BusinessObjectMessageType.Error
});
}
} catch(Exception ex){
throw new Ice.Common.BusinessObjectException(new Ice.Common.BusinessObjectMessage("删除滕一发生错误:"+ex.Message){
Type=Ice.Common.BusinessObjectMessageType.Error
});
}
// outputStr = result.Item2;
}
}
版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
epicor 张国生


