U9 API 课程讲解资料 v0.7 联系客服

发布时间 : 星期日 文章U9 API 课程讲解资料 v0.7更新完毕开始阅读27228e79ba0d4a7303763a59

session1.Commit(); //提交更改,只处理Session1的修改更新 }

2.4 实体新建

新建实体实体的操作分为主实体的新建和非主实体的新建,如果是主实体新建,用不带参数的Create方法,如果是非主实体的,用带上级实例参数的Create方法。 举例: using (ISession session = Session.Open()) { A_Com1c1 objA = A_Com1c1.Create(); objA.Code_A_Com1c1 = 1000; objA.Name_A_Com1c1 = \

B_Com1c1 objB = B_Com1c1.Create(objA);//B为A的子实体 objB.Code_B_Com1c1 = 1001; objB.Name_B_Com1c1 = “objB”; session.Commit(); }

2.5 实体更新

using(ISession session = Session.Open ()){

Customer obj = Customer.Finder.FindByID(id); if(obj!=null) obj.Name = \ session.Modify(obj); ... ... session.Commit(); }

2.6 实体删除

对于组合关系,如果删除主实体,那么,主实体下面的所有子实体,孙实体会被级联删除, 对于非主实体的删除,可以用子集合的RemoveAt和Remove(entity)方法,这2个方法等价,例如 using (ISession session = Session.Open()) { A_Com1cN objA = A_Com1cN.Finder.FindByID(aID); objA.B_Com1cN.RemoveAt(0); //或用下面的方式: B_Com1cN b = Com1cN.Finder.FindByID(bID); objA.B_Com1cN.Remove(b); session.Commit(); }

3. 实体查询方式

3.1 实体的查询类Finder 返回强类型的对象

常用方法:Find,FindByID,FindAll 举例 OqlParamList pList = new OqlParamList(); string strOql = “Code=@Code\ pList.Add(new OqlParam(“Code”, “11”)); Customer.EntityList list=Customer.Finder.FindAll(strOql, pList.ToArray());

3.2 EntityDataQuery

EntityDataQuery 主要用于希望返回结果是IDataReader,DataSet,单值的情况 创建方式:

1、通过Entity对象:

EntityDataQuery q = Customer.Finder.CreateDataQuery();

2、通过EntityFullName:

EntityDataQuery q = new EntityDataQuery(\ EntityDataQuery q = new EntityDataQuery(Customer.EntityRes.BE_FullName);

返回DataSet:FindDataSet 1、全OQL方式 DataSet ds = q.FindDataSet(“select ID,Name,Code from UFIDA::U9::CBO::SCM::Customer::Customer\ 2、条件OQL方式

DataSet ds = q.FindDataSet( \

返回IDataReader :FindDataReader 1、全OQL方式

IDataReader dr = q.FindDataReader (\ 2、条件OQL方式

IDataReader dr = q.FindDataReader ( \

返回单值:

q.FindValue(\

分页查询:

DataSet ds = q.FindDataSetByPage(1, 2, \

3.3 EntityQuery

主要用于希望返回的结果是实体(弱类型) 以强类型的方式使用Customer.Finder,其对外接口和功能与EntityQuery类似,只是Customer.Finder返回强类型的对象,EntityQuery返回弱类型的对象。 创建方式:

1、通过Entity对象: EntityQuery eq = Customer.Finder.CreateQuery(); 2、通过EntityFullName:

EntityQuery q = new EntityQuery(\ EntityQuery q = new EntityQuery(Customer.EntityRes.BE_FullName);

返回实体:FindByID和Find FindByID ,先从缓存加载对象,如果缓存没有,则从数据库加载对象; Customer a = Customer.Finder.FindByID(a.ID); Customer a = (Customer)eq.FindByID(a.ID); Find方式,直接从数据库加载, 然后查缓存,如果缓存有,用缓存对象替换; Customer.Finder.Find(“ID = @ID”); eq.Find(\ 返回实体集合 条件OQL方式: q = new EntityQuery(Customer.EntityRes.BE_FullName);

q.FindAll(“ID >1 \

3.4 EntityViewQuery 报表中用。

4. 第三方程序(DotNet平台)以Web方式调用U9 SV 4.1 找到所需的服务

查询集团文档或利用SQL语句结合查询,如: select

b.DisplayName As [类显示名 ] ,a. FullName as [ 类全名]

,c. AssemblyName as [ 程序集名] ,c. Kind as [ 组件类型]

,d. DisplayName as [ 组件显示名 ] from UBF_MD_Class as a

left join UBF_MD_Class_Trl as b on a. Local_ID=b .Local_ID

left join UBF_MD_Component as c on a. MD_Component_ID=c .ID left join UBF_MD_Component_Trl as d on c. Local_ID=d .Local_ID where (1 =1)

and ( c. Kind='SV' )

and B. DisplayName like '%创建%物料%' (U9的服务均在Portal\\Services内)

4.2 测试服务是否可用

以创建物料(料品)的服务为例,IE地址栏中输入(第一次加载比较慢):

http://vml-win2008r2/u9/services/UFIDA.U9.ISV.Item.IBatchCreateItemByDTOSRV.svc

4.2.1 可能的出错情况

服务不可用时,可能会出现的情况:

1、提示:配置错误 无法读取配置文件,因为它超过了最大文件大小 解决:

<> 修改注册表

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\InetStp\\Configuration] \

(可把以上内容,粘贴到txt文件中,注意靠左,然后修改txt文件为reg文件,双击reg文件进行注册即可) 注册后需重启iis。 如仍出现这个问题:

运行->inetmgr->应用程序池->DefaultAppPool->设置应用程序池默认设置->启用32位应用程序->False;

2、之后,还有可能出现MIME映射问题;

提示:由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射 解决:

执行:\\Windows\\Microsoft.NET\\Framework\\v3.0\\Windows Communication Foundation\\ServiceModelReg.exe -I

(建议在命令窗口内执行)

作用:安装此版本的Windows Communication Foundation ......

4.3 生成代理类

Svcutil http://vml-win2008r2/u9/services/UFIDA.U9.ISV.Item.IBatchCreateItemByDTOSRV.svc /ser:DataContractSerializer 生成一个.cs文件,一个.config文件。

4.4 .NET架构项目 1. 用VS新建项目,

2. 把代理类和配置文件加到项目中 3. 修改output.config名称为app.config

4. 添加System.Runtime.Serialization.dll和System.ServiceModel.dll引用

(如果一个项目中需要用到调用多个服务,则需要合并代理类和配置文件,请参考合并代理类说明文档,未测试)

4.5 尝试编译

“ExceptionDetail”方法没有采用“0”个参数的重载 在报错的相应位置的类里面添加

public ServiceExceptionDetail(Exception exception) : base(exception) { }

4.6 项目实现细节 4.6.1 调用服务框架代码

private void button1_Click(object sender, EventArgs e) {

button1.Enabled = false;

//实例化代理类

UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient client;

client = new UFIDAU9ISVItemIBatchCreateItemByDTOSRVClient(); //返回异常信息,目前还没有使用此属性

UFSoft.UBF.Exceptions1.MessageBase[] returnMsg; //上下文信息 object context;

www.ufida.org.EntityData.UFIDAU9CBOPubControllerContextDTOData contextdto1 = new UFIDAU9CBOPubControllerContextDTOData(); //该服务的返回结果

www.ufida.org.EntityData.UFIDAU9CBOSCMItemItemMasterData[] returnItems; //该服务的传入参数

UFIDAU9ISVItemItemMasterDTOData[] itemMasterDtos;

try {

//给上下文信息赋值

context = CreateContextObj(); contextdto1 = CreateContextDto(); //给传入参数赋值

itemMasterDtos = SetItemMasterDtos();

//服务调用(经验证,v2.5第二个参数context可传null),add by peter 2015-05-25 Context可传入其中一个即可(杂发单中验证通过),context or contextdto1

returnItems = client.Do(out returnMsg, context, itemMasterDtos, contextdto1); MessageBox.Show(\一个料品生成成功!\);