【已解决】移动端插件自动下推【取数为0】
金蝶云社区-姜李直
姜李直
0人赞赏了该文章 1,066次浏览 未经作者许可,禁止转载编辑于2016年05月17日 13:23:56

以下是源码:这段源码在本机PC端测试是没有任何问题的
移动端提示这个问题,也不知道如何去查找问题。调试不便。麻烦总部同事帮忙看看

string sourceFormId = "CRM_OPP_Opportunity";
//目标单
string targetFormId = "CRM_ACTIVITY";

//base.AfterBarItemClick(e);
// 获取源单与目标单直接的转换规则,如果规则未启用,则返回为空,注意容错
// 假设:上游单据FormId为sourceFormId,下游单据FormId为targetFormId
//ps: 这个转换规则需要是默认的。jlz
var rules = ConvertServiceHelper.GetConvertRules(this.View.Context, sourceFormId, targetFormId);
var rule = rules.FirstOrDefault(t => t.IsDefault);

if (rule.IsNullOrEmpty())
{
this.View.ShowMessage("无法获取转换规则");
return;
}
// 获取在列表上当前选择需下推的行
//ListSelectedRow[] selectedRows = ((IListView)this.View).SelectedRowsInfo.ToArray();

// 如下代码为单据上获取当前当前选择行
//string primaryKeyValue = ((IBillView)this.View).Model.GetPKValue().ToString();

//获取主键ID的值
DynamicObject _obj = this.Model.DataObject;
string _billId = Convert.ToString(_obj[0]);

//ListSelectedRow row = new ListSelectedRow(primaryKeyValue, string.Empty, 0, this.View.BillBusinessInfo.GetForm().Id);
//ListSelectedRow row = new ListSelectedRow(primaryKeyValue, string.Empty, 0, sourceFormId);
ListSelectedRow row = new ListSelectedRow(_billId, string.Empty, 0, sourceFormId);
ListSelectedRow[] selectedRows = new ListSelectedRow[] { row };

if (_billId.IsNullOrEmpty())
{
this.View.ShowMessage("_billId为空");
return;
}
if (row.IsNullOrEmpty())
{
this.View.ShowMessage("row为空");
return;
}
if (selectedRows.IsNullOrEmpty())
{
this.View.ShowMessage("selectedRows为空");
return;
}

//测试移动单据获取当前选择行

// 调用下推服务,生成下游单据数据包
ConvertOperationResult operationResult = null;
Dictionary custParams = new Dictionary();
try
{
PushArgs pushArgs = new PushArgs(rule, selectedRows)
{
TargetBillTypeId = "", // 请设定目标单据单据类型。如无单据类型,可以空字符
TargetOrgId = 0, // 请设定目标单据主业务组织。如无主业务组织,可以为0
CustomParams = custParams, // 可以传递额外附加的参数给单据转换插件,如无此需求,可以忽略
};
//执行下推操作,并获取下推结果
operationResult = ConvertServiceHelper.Push(this.View.Context, pushArgs, OperateOption.Create());
}
catch (KDExceptionValidate ex)
{
this.View.ShowErrMessage(ex.Message, ex.ValidateString);
return;
}
catch (KDException ex)
{
this.View.ShowErrMessage(ex.Message);
return;
}
catch
{
throw;
}
// 获取生成的目标单据数据包
DynamicObject[] objs = (from p in operationResult.TargetDataEntities
select p.DataEntity).ToArray();
// 读取目标单据元数据
var targetBillMeta = MetaDataServiceHelper.Load(this.View.Context, targetFormId) as FormMetadata;
OperateOption saveOption = OperateOption.Create();
// 忽略全部需要交互性质的提示,直接保存;
saveOption.SetIgnoreWarning(true); // 提交数据库保存,并获取保存结果
var saveResult = BusinessDataServiceHelper.Save(this.View.Context, targetBillMeta.BusinessInfo, objs, saveOption, "Save");
this.View.ShowMessage(saveResult.IsSuccess.ToString());