金蝶云星空插件开发常用代码

全局参数相关

this.Context.UserId//获取当前用户ID

this.Context.UserName//获取当前用户名

this.Context.LoginName//获取当前用户登陆账户

this.Context.CurrentOrganizationInfo.ID//获取当前组织

this.Context.ClientType//获取当前登陆类型:客户端(WPF)或网页端()

this.Context.IsMultiOrg;//获取是否是第一次加载

this.View.Model.GetPKValue();获取当前单据ID


控件基础操作

设置菜单显示的文本

this.View.GetBarItem(“Toolbar1”, “tbCK_ShowFolder”).Text = IsShowFolder.Equals(“1”) ? “隐藏文件夹” : “显示文件夹”;

设置控件标题

this.View.GetControl(“FCombox”).SetCustomPropertyValue(“title”, “控件标题”);

设置控件的显示隐藏

this.View.GetControl(“FPriority”).Visible = true;

this.ListView.GetBarItem(“FList”, “tbNew”).Visible = false;

设置单据体为不可编辑状态

this.View.StyleManager.SetEnabled(“FEntity”, null, false);

设置控件锁定

this.View.LockField(“FBase1”, false);

this.View.StyleManager.SetEnabled(“FCustomer”, null, false);

this.View.GetControl(“FCustomer”).SetCustomPropertyValue(“disabled”,false);

设置控件选中的焦点

this.View.GetControl(“FTextSearch”).SetFocus();

设置字段必录

(this.View.GetControl(“FMilestone”) as FieldEditor).SetCustomPropertyValue(KeyConst.MUSTINPUT, true);

修改页签标题

This.View.GetControl(“FTab_p0”).SetCustomPropertyValue(“title”,”XXXX页签名称”)

修改控件颜色

this.View.GetControl(“1111”).ControlAppearance.TextColor = “@FF0000”;

获取窗体ID

this.View.UserParameterKey

获取父级页面

this.View.ParentFormView

分隔容器

this.View.GetControl(“FSpliteContainer”).HideFirstPanel(false);//隐藏上部分

this.View.GetControl(“FSpliteContainer”).HideSecondPanel(false);//隐藏下部分

面板

this.View.GetControl(“FPanel”).SetBackGroundColor(“#FFFF0000”);//添加背景色

修改按钮字体大小

this.View.GetControl(“FBtnQuery”).SetCustomPropertyValue(“fontSize”, 20);

修改按钮样式

this.View.GetControl

this.View.GetControlthis.View.GetControl

修改按钮显示图片

this.View.GetControl

修改按钮样式为图片与文字共存,并允许显示小文字

this.View.GetControl(“FSHOPCAR”).SetStyleKey(“TextIconWithMsgButtonStyle”)

this.View.GetControl(“FSHOPCAR”).SetViceText(“300”)

this.View.GetControl(“FSHOPCAR”).SetTextIcon(“images/biz/default/Common/ShopcarBig.png”)


赋值

基础资料取值

DynamicObject obj = this.Model.DataObject;

DynamicObjectCollection rows = obj[“PPBomEntry”] as DynamicObjectCollection;//子项明细实体

var wl = rows[i][“MaterialID”] as DynamicObject;//取物料

string zxwl = wl[“F_DZLSX”].ToString();//取基础物料属性值

//获取基础物料编码

this.View.Model.GetValue(“F_CPLH”) == null ? “0” : (this.View.Model.GetValue(“F_CPLH”) as DynamicObject)[“Number”].ToString();

//普通赋值

this.View.Model.SetValue(“FStartDate”, DateTime.Now.ToString(“yyyy-MM-dd”));

//基础资料赋值

this.Model.SetItemValueByID(“FSurfaceTreatment”, “1”, 0);

this.Model.SetItemValueByNumber(“FSurfaceTreatment”, “1”, 0);

//多选基础资料赋值

string[] notifyList = new String[] { this.Context.UserId.ToString() };

this.Model.SetValue(“FNotify”, notifyList);

//单据体赋值

DataTable tableQuery = new DataTable();

this.View.Model.ClearNoDataRow();

this.View.Model.DeleteEntryData(“FEntity”);

foreach (DataRow row in tableQuery.Rows)

{

this.Model.CreateNewEntryRow(“FEntity”);

int RowCout = this.Model.GetEntryRowCount(“FEntity”);

this.Model.SetValue(“FID”, row[“FID”], RowCout – 1);

this.Model.SetValue(“FNUMBER”, row[“FNUMBER”], RowCout – 1);

this.Model.SetItemValueByNumber(“FSurfaceTreatment”, “1”, RowCout – 1);

}

this.View.UpdateView(“FEntity”);


单据体相关

//单据体赋值

DataTable tableQuery = new DataTable();

this.View.Model.ClearNoDataRow();

this.View.Model.DeleteEntryData(“FEntity”);

foreach (DataRow row in tableQuery.Rows)

{

this.Model.CreateNewEntryRow(“FEntity”);

int RowCout = this.Model.GetEntryRowCount(“FEntity”);

this.Model.SetValue(“FID”, row[“FID”], RowCout – 1);

this.Model.SetValue(“FNUMBER”, row[“FNUMBER”], RowCout – 1);

this.Model.SetItemValueByNumber(“FSurfaceTreatment”, “1”, RowCout – 1);

}

this.View.UpdateView(“FEntity”);

//获取单据体的值

int iRowIndex = this.View.Model.GetEntryCurrentRowIndex(“FEntity”);

EntryEntity entryEntity = this.View.BusinessInfo.GetEntryEntity(“FEntity”);

DynamicObjectCollection docCustomer = this.View.Model.GetEntityDataObject(entryEntity);

string fid = docCustomer[iRowIndex][“FID”].ToString();

//获取单据体当前选中的列

this.View.GetControl(“FTreeEntity”).GetFocusField();

设置选择的值高亮显示

this.View.GetControl(“FList”).SetFireRowChangeEvent(true);

//冻结列

this.View.GetControl(“FEntity”).SetFrozen(“FPartName”, “”);

//设置某行某列锁定

this.View.GetFieldEditor(“FNetWeightChange”, e.Row).SetEnabled(“”, True);

//循环单据体所有列

foreach (Field fld in _currInfo.GetEntity(“FEntity”).Fields)

初始化表格的导航属性为纵向导航(即按回车是往下移动焦点)

this.View.GetControl(Key).SetEnterMoveNextColumnCell(true);

创建行

this.View.Model.CreateNewEntryRow(“FEntity”);//新增

删除行

this.View.Model.DeleteEntryRow(“FEntity”, (int)rownum);//删除

设置字段默认排序

this.View.GetControl(“FEntity”).SetSort(“FEStep”, EntryGridFieldSortOrder.Ascending);

锁定列头

this.View.GetControl(“FEntity”).SimplizationAllColumns();

设置样式

DataTable tableStyle = new DataTable();

tableStyle.Columns.AddRange(new DataColumn[] { new DataColumn(“FFileName”), new DataColumn(“FColor”), new DataColumn(“FRowIndex”) });

tableStyle.Rows.Add(“FFileName”, UtilHelper.未开始颜色, RowCout – 1);

EntryGrid grid = this.View.GetControl(“FEntity”);

foreach (DataRow row in tableStyle.Rows)

{

grid.SetBackcolor(row[“FFileName”].ToString(), row[“FColor”].ToString(), Convert.ToInt32(row[“FRowIndex”]));

}

设置过滤条件

EntryGrid grid = this.View.GetControl(“FEntity”);

grid.SetFilterString(” FC_IsAllocated = ‘true’ “);

设置选中行

this.View.GetControl(“FEntityD”).SetFocusRowIndex(iRowIndex);

根据条件锁定单据体单元格

DynamicObjectCollection part = this.View.Model.GetEntityDataObject(this.View.BusinessInfo.GetEntryEntity(“FEntity”));

for (int i = 0; i < part.Count; i++)

{

if (!(part[i][“FEState”] == null ? “未开始” : part[i][“FEState”].ToString()).Equals(“未开始”))

{

this.View.GetFieldEditor(“FESurfaceCode”, i).SetEnabled(“”, false);

}

}


列表插件

隐藏菜单

this.ListView.GetMainBarItem(“tbNew”).Visible = false;

设置列表行高

this.View.GetControl(“FLIST”).SetRowHeight(25);

获取选中行

ListSelectedRow selectRows = this.ListView.CurrentSelectedRowInfo;

if (selectRows == null)

{

this.View.ShowErrMessage(“未选中行记录!”);

return;

}

string fid = selectRows.PrimaryKeyValue.ToString();

获取选中的行

Kingdee.BOS.Core.List.ListSelectedRowCollection selectedRowsInfo = this.ListView.SelectedRowsInfo;

string objectID = this.ListView.BillBusinessInfo.GetForm().Id;

获取当前列表查询的所有主键数据

this.ListView.GetPKData();

刷新列表

this.ListView.Refresh();

根据过滤条件,重新取数,刷新列表

this.ListView.RefreshByFilter();

动态设置列表值显示

public override void FormatCellValue(FormatCellValueArgs args)

{

string filedName = args.Header.FieldName;//字段名

if (filedName.EqualsIgnoreCase(“FNowDisposeUser”))//获取当前处理人员

{

args.FormateValue = “显示的值”;

}

}

//设置默认查询条件 设置值能查看自己有权限的仓库

public override void PrepareFilterParameter(FilterArgs e)

{

if (string.IsNullOrWhiteSpace(e.FilterString) == false)

{

e.FilterString += ” and “;

}

e.FilterString += string.Format(@” FSTOCKID IN (SELECT FID FROM dbo.LT_CBS_t_StockAdmin a WHERE c.FUSERID = {0}) “, this.Context.UserId.ToString());

}


界面相关

//设置单据标题

LocaleValue formTitle = new LocaleValue();

formTitle.Add(new KeyValuePair<int, string=””>(this.Context.UserLocale.LCID, “文件管理-修订”));

this.View.SetFormTitle(formTitle);

//打开窗体

DynamicFormShowParameter param = new DynamicFormShowParameter();

param.FormId = “SAL_DISCOUNTDETAIL”;

param.CustomParams.Add(“IncludedTax”, “true”);//传入参数

this.View.ShowForm(param);

//获取页面中的所有控件

public List GetAllKeyList()

{

IMetaDataService metaService = ServiceHelper.GetService();

FormMetadata meta = metaService.Load(this.Context, “”) as FormMetadata;

return meta == null ? new List() : meta.BusinessInfo.Elements.Select(field => field.Key).ToList();

List xx = meta.BusinessInfo.GetFieldList();

}

//【1】打开F7界面

int iClassTypeID = 1012506;

int iLookupType = (int)BOSEnum.Enu_LookUpType.Enu_LookUpType_NewBase;

m_BillInterface.ShowF7Select(send, new OnShowF7SelectEventArgs(iLookupType, iClassTypeID, strFilter));

//【2】打开自定义aspx页面

Guid rndGuid = Guid.NewGuid();

string strUrl = “CRM/BumpBill.aspx?FClassTypeID=1012024&FRndNum=” + rndGuid.ToString()

+ “??dialogWidth:800px; dialogHeight:600px;resizable:no;status: no; unadorned : no; help : no;Minimize=no;Maximize=no;”;

m_ListInterface.AddAction(new BOSAction(iBillID.ToString(), “ShowBill”, strUrl));

//【3】打开EBOS单据

Dictionary dctData = new Dictionary();

dctData[“FID”] = iBillID.ToString();

m_ListInterface.ShowBill(1012025, BOSEnum.Enu_BillStatus.Enu_BillStatus_New, dctData);

//【4】打开序时簿

StringBuilder sBuilder = new StringBuilder();

sBuilder.AppendFormat(“EXTBOS/Filter/BOSListManager.aspx?FClassTypeID=1012701&FDirect=1&FQuick=1&FLic=0&FType=-1”);

sBuilder.AppendFormat(“??dialogWidth:750px; dialogHeight:565px;”);

sBuilder.AppendFormat(“resizable:no;scroll: no; status: no; unadorned : no; help : no;Minimize=no;Maximize=no;”);

m_BillInterface.ShowCustomePage(e.BarName, sBuilder.ToString());

//页签控件的使用

this.View.GetControl(“F_LT_Tab”).SelectedIndex = 0;

this.View.GetControl(“F_LT_Tab”).SetFireSelChanged(true);//设置该页签触发页签切换事件

this.View.GetControl(“F_LT_Tab”).SelectedTabItemKey = “F_LT_TAB2_P0”;//调用无效

//页签切换事件

public override void TabItemSelectedChange(TabItemSelectedChangeEventArgs e)

{

string sendID = e.Key.ToUpper();

if (sendID.Equals(“FTABUSING”))

{

}

}

//面板嵌入网页

this.View.GetControl(“FPanelWebBrowse”).SetCustomPropertyValue(“Source”, “www.189622.com”);

需要表单构造插件!!!!

public class LT_PLM_FindReport2 : AbstractDynamicWebFormBuilderPlugIn

{

public override void CreateControl(CreateControlEventArgs e)

{

if (e.ControlAppearance.Key.EqualsIgnoreCase(“F_LT_Panel”))

{

e.Control[“xtype”] = “kdwebbrowser”;

}

}

}

//等待界面

var processForm = this.View.ShowProcessForm(new Action(t => { }), true, “正在执行,请稍候…”);

Kingdee.BOS.KDThread.MainWorker.QuequeTask(() =>

{

try

{

//分成5次停留,模拟引入数据的时间消耗

//每次停留2s,刷新一下实际进度值

System.Threading.Thread.Sleep(2000);

//更新进度

this.View.Session[“ProcessRateValue”] = 20;

System.Threading.Thread.Sleep(2000);

//更新进度

this.View.Session[“ProcessRateValue”] = 40;

System.Threading.Thread.Sleep(2000);

//更新进度

this.View.Session[“ProcessRateValue”] = 60;

System.Threading.Thread.Sleep(2000);

//更新进度

this.View.Session[“ProcessRateValue”] = 80;

System.Threading.Thread.Sleep(2000);

//更新进度:更新到100时,会自动关闭进度界面,结束进度

this.View.Session[“ProcessRateValue”] = 100;

}

finally

{

// 确保标记进度已经到达100%

this.View.Session[“ProcessRateValue”] = 100;

// 引入完毕,关闭进度显示页面

var processView = this.View.GetView(processForm.PageId);

if (processView != null)

{

processView.Close();

this.View.SendDynamicFormAction(processView);

}

}

}, (t) => { });


基础资料相关

//基础资料取值

this.View.Model.GetValue(“FCustomer”) == null ? “0” : (this.View.Model.GetValue(“FCustomer”) as DynamicObject)[“Id”].ToString()

//普通赋值

this.View.Model.SetValue(“FStartDate”, DateTime.Now.ToString(“yyyy-MM-dd”));

//基础资料赋值

this.Model.SetItemValueByID(“FSurfaceTreatment”, “1”, 0);

this.Model.SetItemValueByNumber(“FSurfaceTreatment”, “1”, 0);

//多选基础资料赋值

string[] notifyList = new String[] { this.Context.UserId.ToString() };

this.Model.SetValue(“FNotify”, notifyList);

//获取基础资料ID

IDBService DBService = Kingdee.BOS.Contracts.ServiceFactory.GetService(this.Context);

IEnumerable fEntryIDS = DBService.GetSequenceInt64(this.Context, “LT_IT_ITAssetsBudgetDetail”, addNum);


下拉列表相关

对下拉列表进行赋值

//定义List用于存储下拉列表枚举值;

List list = new List();

//通过this.View.BusinessInfo.GetFieldList()方法获取所有字段;

foreach (Kingdee.BOS.Core.Metadata.FieldElement.Field field in this.View.BusinessInfo.GetFieldList())

{

EnumItem item = new EnumItem();

item.Caption = field.Name;

item.EnumId = field.Key;

item.Value = field.Key;

list.Add(item);

}

//通过this.View.GetControl方法获取界面上的下拉列表控件;

//SetComboItems绑定值;

this.View.GetControl(“FCombo”).SetComboItems(list);


提示信息

this.View.ShowErrMessage(Kingdee.BOS.Resource.ResManager.LoadKDString(“请选择一个分录数据!”, “005023000000576”, Kingdee.BOS.Resource.SubSystemType.BASE));

this.View.ShowWarnningMessage(Kingdee.BOS.Resource.ResManager.LoadKDString(“该客户已经被信用档案引用,不能反启用信用管理”, “005023000000575”,

Kingdee.BOS.Resource.SubSystemType.BASE));

var description = string.Format(Kingdee.BOS.Resource.ResManager.LoadKDString(“客户【{0}】的订货平台管理员”, “005023000000580”,

Kingdee.BOS.Resource.SubSystemType.BASE), “1111”);

this.View.ShowMessage(string.Format(Kingdee.BOS.Resource.ResManager.LoadKDString(“创建订货平台管理员成功!帐号为客户编码:{0},密码默认为888888!”, “005023000000581”,

Kingdee.BOS.Resource.SubSystemType.BASE), “1111”), MessageBoxType.Notice);

this.View.ShowMessage(Kingdee.BOS.Resource.ResManager.LoadKDString(“请确认是否删除选定的记录?”, “005023000000584”,

Kingdee.BOS.Resource.SubSystemType.BASE), MessageBoxOptions.YesNo,

new Action((result) =>

{

if (result == MessageBoxResult.Yes)

{

}

}));

//列表弹出自定义提示内容

IOperationResult opResult = new OperationResult();

opResult.OperateResult.Add(new OperateResult()

{

Message = “”,

MessageType = MessageType.Normal,

SuccessStatus = true

});

this.View.ShowOperateResult(opResult.OperateResult);

DynamicFormShowParameter param = new DynamicFormShowParameter {

FormId = “BOS_ImportErrMsg”

};

this.View.Session[“importDataResult”] = result;

this.View.Session[“businessInfo”] = this._meta.BusinessInfo;

param.CustomParams.Add(“result”, “importDataResult”);

param.CustomParams.Add(“exporttype”, exportType.ToString());

param.CustomParams.Add(“businessInfo”, “businessInfo”);

param.OpenStyle.ShowType = ShowType.Modal;

this.View.ShowForm(param);


自定义事件

string _isQueryPanelVisible = “FALSE”;//是否显示查询面板

public override void CustomEvents(CustomEventsArgs e)

{

if (e.EventName.Equals(“IsExpandedChanged”))

{

if (e.Key.ToUpper().Equals(“F_LT_FRAME”))

{

//获取框架控件的伸缩状态

_isQueryPanelVisible = e.EventArgs;

}

}

if (e.EventName.Equals(“EnterKeyPressed”))

{

if (e.Key.ToUpper().Equals(“FTEXTSEARCH”))

{

焦点在文本框上按回车执行事件

}

}

if (e.EventName.ToUpper() == “FILECHANGED”)

{

if (e.Key.ToUpper() == “FileUpdate”.ToUpper())

{

文件上传事件

}

}

}


public override void OnFormatRowConditions(Core.Report.PlugIn.Args.ReportFormatConditionArgs args)

{

FormatCondition fc = new FormatCondition();

fc.ApplayRow = true;

if (args.DataRow.ColumnContains(“FUserName”)&&args.DataRow[“FUserName”].ToString() ==

“Dev”)// 用户等于Dev

{

fc.BackColor = ColorTranslator.ToHtml(System.Drawing.Color.Blue);// 背景色蓝色;

}

args.FormatConditions.Add(fc);

}

设置列表、帐表数据行背景色

grid.SetForecolor(“FNUMBER”, “#ff0000”, 0);

grid.SetForecolor(“FNUMBER”, “#FF0000”, 0);//注意:这里是字段标识Key

this.View.ShowMessage(“121212”);

grid.SetBackcolor(“FNUMBER”, “#FF2525”, 1);

grid.SetRowBackcolor(“#FF2525”,0);

EntryGrid grid = this.View.GetControl(“FEntity”);

grid.Enabled = false;

grid.SetRowBackcolor(“#FFFF00”, 0);

//通用设置方法

DataTable tableStyle = new DataTable();

tableStyle.Columns.AddRange(new DataColumn[] { new DataColumn(“FFileName”),new DataColumn(“FColor”), new DataColumn(“FRowIndex”)});

tableStyle.Rows.Add(“FNName”, UtilHelper.已超期颜色, RowCout – 1);//如果为关键节点则显示红色

TreeEntryGrid grid = this.View.GetControl(“FTreeEntity”);

foreach (DataRow row in tableStyle.Rows)

{

grid.SetForecolor(row[“FFileName”].ToString(), row[“FColor”].ToString(), Convert.ToInt32(row[“FRowIndex”]));

}


————————————————————打开一个窗口,在此窗口直接打开URL地址

private void ShowKDWebBrowseForm()

{

Kingdee.BOS.JSON.JSONObject webobj = new Kingdee.BOS.JSON.JSONObject();

webobj[“source”] = @”http://www.189622.com”;

webobj[“height”] = 545;

webobj[“width”] = 810;

webobj[“isweb”] = true; //是否新弹出一个浏览器窗口(or选项卡)打开网页地址

webobj[“title”] = “金蝶官网”;

//要求前端,调用ShowKDWebbrowseForm方法,显示指定的网页

this.View.AddAction(“ShowKDWebbrowseForm”, webobj);

this.View.SendDynamicFormAction(this.View);

}

————————————————————调用单据保存

DynamicObject[] doCustomer = new DynamicObject[1];

doCustomer[0] = this.Model.DataObject;

this.View.InvokeFormOperation(FormOperationEnum.Save);

AppServiceContext.SaveService.Save(this.Context, this.View.OpenParameter.FormMetaData.BusinessInfo, doCustomer);

————————————————————DynamicObject

DynamicObject的结构非常简单明了,就是一个字典,类似于一个Dictionary<string, object=””>,其中的object可能是一个简单值(普通字段)

可能是一个复杂值(如基础资料字段),更可能是一个集合(如单据体);

如果值是一个集合,则这个集合的成员,又会是一个DynamicObject对象。

实际上,我们并不推荐伙伴直接操作DynamicObject,所以也不会提供此方面的介绍。

我们是希望开发者通过如下方式读取字段数据:

1. 在界面插件中,通过如下方式取数:

this.Model.GetValue(key, rowIndex);

2. 在其他缺少Model的地方,则采用如下方式取数:

普通字段:

var field = businessInfo.GetField(key);

string value = field.DynamicProperty.GetValue(dynamicObject);

基础资料字段:

var baseField = businessInfo.GetField(key) as BaseDataField;

long id = Convert.ToInt64(baseField.RefIdDynamicProperty.GetValue(dynamicObject));

DynamicObject bdInfo = baseField.DynamicProperty.GetValue(dynamicObject) as DynamicObject;

单据体:

var entity = businessInfo.GetEntity(key);

DynamicObjectCollection rows = entity.DynamicProperty.GetValue(dynamicObject) as DynamicObjectCollection;

多选辅助资料:

MulAssistantField targetFld = businessInfo.GetField(key) as MulAssistantField;

DynamicObjectCollection mulAssiRows = targetFld.RefEntityDynamicProperty.GetValue(headObj) as DynamicObjectCollection;

foreach(var row in mulAssiRows)

{

string id = Convert.ToString(targetFld.RefIDDynamicProperty.GetValue(row));

DynamicObject bdInfo = targetFld.DynamicProperty.GetValue(row) as DynamicObject;

}

多选基础资料,类似于多选辅助资料,不赘述;

上述方式,都是通过字段、实体上的DynamicProperty属性到DynamicObject中取数,此属性也提供了SetValue方法赋值;

3. 既没有Model,也没有字段元数据时,才根据DynamicObject本身的结构,逐层往下取数(高级):

语句1:取简单值

string strValue = Convert.ToString(dynamicObject[key]);

语句2:取复杂值

DynamicObject bdInfo = dynamicObject[key] as DynamicObject;

语句3:取集合,及集合中字段值

DynamicObjectCollection mulAssiRows = dynamicObject[entityKey] as DynamicObjectCollection;

foreach(var row in mulAssiRows)

{

string id = Convert.ToString(row[key]);

DynamicObject bdInfo = row[key] as DynamicObject;

}


服务插件

1、事件:AfterExecuteOperationTransaction,发生在审核完成后。执行失败不会影响审核

2、事件:EndOperationTransaction,发生在审核完成后。执行失败会影响审核

–保存验证插件

public class LT_PLM2_SampleApplySave : AbstractOperationServicePlugIn

{

public override void OnPreparePropertys(PreparePropertysEventArgs e)

{

base.OnPreparePropertys(e);

//添加字段,这样在底下Validate才能取到值,奇怪..

e.FieldKeys.Add(“FItemNumber”);

}

public override void OnAddValidators(AddValidatorsEventArgs e)

{

base.OnAddValidators(e);

var validator = new LT_PLM2_SampleApplySaveValidator();

validator.EntityKey = “FBillHead”;

e.Validators.Add(validator);

}

}

public class LT_PLM2_SampleApplySaveValidator : AbstractValidator

{

public override void Validate(ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Context ctx)

{

foreach (ExtendedDataEntity entity in dataEntities)

{

string sql = string.Empty;

string Id = entity.DataEntity[“Id”].ToString();

string FBillStatus = entity.DataEntity[“FBillStatus”].ToString();//单据状态

string FItemNumber = entity.DataEntity[“FItemNumber”] == null ? string.Empty : entity.DataEntity[“FItemNumber”].ToString();//物料代码

DynamicObjectCollection docCustomer = entity.DataEntity[“LT_PLM2_SampleApplyEntry”] as DynamicObjectCollection;//获取单据体信息

if (FProjectID.Equals(string.Empty))

{

validateContext.AddError(entity, new ValidationErrorInfo(validateContext.BusinessInfo.GetBillNoField().Id, Id, entity.DataEntityIndex, 0, Id,

“保存失败,请关联项目!”, “错误!”, ErrorLevel.FatalError));

return;

}

}

}

}

————————————————————插件事务

//必须引用System.Transactions.dll

using(KDTransactionScope trans = new KDTransactionScope(System.Transactions.TransactionScopeOption.Required))

{

// TODO

Kingdee.BOS.App.Data.DBUtils.Execute(this.Context, “truncate TABLE t1”);

trans.Complete();

}

——————————————————————-模拟手动创建单据

///

/// 创建新增单据视图

///

/// 上下文对象

/// 表单标识

///

public static IBillView CreateAddNewView(Context ctx, string formId)

{

FormMetadata meta = MetaDataServiceHelper.Load(ctx, formId) as FormMetadata;

BusinessInfo info = meta.BusinessInfo;

IResourceServiceProvider formServiceProvider = info.GetForm().GetFormServiceProvider(true);

IBillViewService billViewService = formServiceProvider.GetService(typeof(IDynamicFormView)) as IBillViewService;

Form form = info.GetForm();

BillOpenParameter billOpenParameter = new BillOpenParameter(form.Id, meta.GetLayoutInfo().Id);

billOpenParameter = new BillOpenParameter(form.Id, string.Empty);

billOpenParameter.Context = ctx;

billOpenParameter.ServiceName = form.FormServiceName;

billOpenParameter.PageId = Guid.NewGuid().ToString();

billOpenParameter.FormMetaData = meta;

billOpenParameter.LayoutId = meta.GetLayoutInfo().Id;

billOpenParameter.Status = OperationStatus.ADDNEW;

billOpenParameter.PkValue = null;

billOpenParameter.CreateFrom = CreateFrom.Default;

billOpenParameter.ParentId = 0;

billOpenParameter.GroupId = “”;

billOpenParameter.DefaultBillTypeId = null;

billOpenParameter.DefaultBusinessFlowId = null;

billOpenParameter.SetCustomParameter(“ShowConfirmDialogWhenChangeOrg”, false);//设置参数,主业务组织修改时,不提示,直接创建新单

List value = form.CreateFormPlugIns();

billOpenParameter.SetCustomParameter(FormConst.PlugIns, value);

((IDynamicFormViewService)billViewService).Initialize(billOpenParameter, formServiceProvider);//初始化视图

IBillView bill_view = (IBillView)billViewService;//表单视图

bill_view.CreateNewModelData();//创建新的模型数据

DynamicFormViewPlugInProxy proxy = bill_view.GetService();//主动触发插件的OnLoad事件

proxy.FireOnLoad();

return bill_view;

}

IBil1View bil1_view = toEditView(“BD_MATERIAL”, FMaterialld); IDynamicFormViewService

dynamicFormView = bill_view as IDynamicFormViewService;

//结算单整个的表单

dymamicFormView. SetItemValueByTD(“E_QLRB pp”,dynamioObject[‘P_QLFB_PFEAY”] != mull ? dymamioCbjectl[ “_LRB_PPMY”].ToString() : “”0);

bi11_view. Mode1.Save() ;

——————————————————————————

判断文本、基础资料、数量、日期等常见字段是否为空的表达式

  • 文本为空
  • F_TPQJ_Text  = null  OR  F_TPQJ_Text  = “”  OR  F_TPQJ_Text  = ” “
  • 基础资料为空
  • F_TPQJ_Base  = null  OR  F_TPQJ_Base = “”  OR  F_TPQJ_Base = ” “
  • 多选基础资料为空
  • len( F_TPQJ_MulBase ) > 0
  • 数量为空(整数、小数、数量因为默认值是0,都可以用0来判断)
  • F_TPQJ_Qty =0
  • 日期为空
  • F_TPQJ_Date is null
  • 复选框,不勾选
  •  F_TPQJ_CheckBox  = false
  • 下拉列表判断为空
  •  F_TPQJ_Combo  = “”
  • ————————————
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 金蝶云星空SQL报表开发是基于金蝶云星空平台的一种数据分析和报表制作功能。该功能为用户提供了丰富的数据分析和展示能力,并为各类业务决策提供数据支撑。通过金蝶云星空SQL报表开发,使用者可以方便地设置查询条件、运算符和参数等,生成符合实际需求的报表。 使用金蝶云星空SQL报表开发,用户可以快速生成各种报表,包括基础报表、汇总报表、卡片报表等,还可以进行数据透视分析、排名分析等多维数据分析。报表的生成和展示过程简单方便,操作界面友好,用户可以轻松地进行上手学习和操作。 金蝶云星空SQL报表开发不仅具备灵活性和针对性,还具有安全性和数据保护性,避免了数据泄露和误操作的风险。同时,平台采用端存储和数据交互方式,用户可以随时随地进行数据访问和处理,方便了多地协同工作。 总之,金蝶云星空SQL报表开发具有简单易用、功能强大、安全可靠等优点,是一种非常实用的数据分析和报表制作工具。无论是企业的管理层还是中小企业主,都可以从中获得更多的商业价值。 ### 回答2: 金蝶云星空sql报表开发是一种基于计算的数据报表开发工具。它提供了丰富的数据分析功能,可以满足不同行业、不同企业的不同需求。通过金蝶云星空sql报表开发,用户可以轻松地进行数据挖掘、数据分析、数据预测等操作,实现数据驱动的决策。 金蝶云星空sql报表开发的关键是其强大的数据查询、分析和可视化能力。用户可以在不需要写代码的情况下,根据自己的需求来查询和分析数据。同时,金蝶云星空sql报表开发还提供了丰富的图表和报表模板,用户可以根据需求选择最适合自己的报表风格,让数据更加直观、易懂。 金蝶云星空sql报表开发还提供了端部署和管理功能,用户无需担心安全问题和数据丢失问题。同时,该工具也支持多人协作和数据共享,方便用户进行团队工作。 总之,金蝶云星空sql报表开发是一种强大的数据分析和报表开发工具,适合各类企业、组织和个人使用。它开创了数据分析的新时代,帮助用户更好地发现和利用数据,提高企业决策效率。 ### 回答3: 金蝶云星空是一款全新的企业级平台,其中包括了开放式平台、数十年的财务行业经验和领先的OaaS服务。在星空的基础上,可以快速构建各种业务应用、进行个性化定制和开发。 而金蝶云星空SQL报表开发,是星空平台上的一项关键服务之一。通过该服务,我们可以在平台上灵活地进行数据统计、分析,从而帮助企业更好地掌握自己的经营情况。 首先,金蝶云星空SQL报表开发支持多种方式对数据进行筛选和查询,满足不同业务场景下的需求。同时,通过适当的权限设置,可以保证数据的安全性。 其次,平台提供了多种报表模板供用户选择,用户还可以根据自己的需求和喜好进行自定义设计。除此之外,用户还可以实时对报表进行预览和调试,以便快速调整和完善。 此外,金蝶云星空SQL报表开发还支持快速生成图表和图形化报表,通过直观的数据展示方式,帮助用户更好地理解和分析数据,从而更加敏锐地把握市场动态和经营趋势,及时调整经营策略。 综上所述,金蝶云星空SQL报表开发是一项功能强大的服务,能够帮助企业快速、准确地获取数据,并通过数据分析生成合适的报表,为决策者提供切实可行的决策依据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值