U9 API 课程讲解资料 v07Word文档格式.docx
- 文档编号:18163803
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:27
- 大小:251.70KB
U9 API 课程讲解资料 v07Word文档格式.docx
《U9 API 课程讲解资料 v07Word文档格式.docx》由会员分享,可在线阅读,更多相关《U9 API 课程讲解资料 v07Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
basicHttpBinding"
/>
/services>
/system.serviceModel>
/configuration>
说明:
蓝色字体之间的内容为追加的节点;
其中,
servicename为.svc文件名的修改,UFIDA.U9.Cust.XM.HXPP.EX.PurchaseOrderSV.OperationSVStub,前缀与.svc文件名一样,后面粗体字的改为:
前面去掉I,后面加Stub;
U9SrvTypeBehaviors为固定值;
endpointcontract为.svc文件名:
UFIDA.U9.Cust.XM.HXPP.EX.PurchaseOrderSV.IOperationSV;
basicHttpBinding为固定值。
2015-06-22addbypeter可新建.config文件进行部署(便于出补丁)
在\Portal\Services下新建config文件,如:
UFIDA.U9.Cust.XC.SH.IF.ICSV.ICreateItemCostAdjDoc.config(文件名可以svc文件名命名)
内容参考如下:
?
xmlversion="
1.0"
encoding="
utf-8"
configuration>
system.serviceModel>
<
behaviors>
<
serviceBehaviors>
<
behaviorname="
<
serviceMetadatahttpGetEnabled="
true"
/behavior>
/serviceBehaviors>
/behaviors>
services>
!
--CreateItemCostAdjustDoc-->
UFIDA.U9.Cust.XC.SH.IF.ICSV.CreateItemCostAdjDocStub"
UFIDA.U9.Cust.XC.SH.IF.ICSV.ICreateItemCostAdjDoc"
(U9V2.8中经验证过,Config文件内的注释不支持中文)
浏览器中测试服务,效果如下:
(与标准产品的有所不同,但验证过能用)
1.5测试服务是否正常工作
http:
//vml-win2008r2/U9/Services/UFIDA.U9.Cust.XM.HXPP.EX.PurchaseOrderSV.IOperationSV.svc
1.6业务逻辑代码参考
//引用UFIDA.U9.PM.PMBP.Agent.dll,UFIDA.U9.PM.PMBP.Deploy.dll
//引用UFIDA.U9.PM.PMBE.Deploy.dll
publicoverrideobjectDo(objectobj)
{
OperationSVbpObj=(OperationSV)obj;
//校验
if(bpObj.ID<
=0){returnfalse;
}
try
//调用PM操作(提交、审核、弃审)BP
UFIDA.U9.PM.PO.Proxy.SinglePoShipLineBPProxyp1=newUFIDA.U9.PM.PO.Proxy.SinglePoShipLineBPProxy();
//操作类型
switch(bpObj.ActionType)
case0:
p1.ActionType=(int)UFIDA.U9.PM.Enums.ActivateTypeEnumData.ApprovingAct;
break;
case1:
p1.ActionType=(int)UFIDA.U9.PM.Enums.ActivateTypeEnumData.ApprovedAct;
case2:
p1.ActionType=(int)UFIDA.U9.PM.Enums.ActivateTypeEnumData.OpenAct;
default:
returnfalse;
//采购订单计划行ID(提交、审核、弃审,传入一计划行ID即为整单操作)select*fromPM_POShipLine
p1.PoShipLineKey=bpObj.ID;
p1.Do();
catch(Exceptionex1)
{thrownewException(ex1.Message);
returntrue;
编译并复制更新SVDLL
1.7使用API测试工具,测试该SV是否生效。
使用API测试工具,出现的情况说明:
1、v2.5金盘,报Support_CultureNameList为空的错;
升级补丁后,则报:
[ERROR][PurchaseOrderSV.OperationSVStub]-System.Exception:
当前环境下默认语种为空;
目前未解决。
(始终保持不升级补丁)解决,反编译WebServiceStudio.exe,直接修改源代码,加传入参数:
context.AddKeyValue(6,"
DefaultCultureName"
"
zh-CN"
);
context.AddKeyValue(7,"
Support_CultureNameList"
修改后的工具如下:
遗留问题:
提交、审核操作成功,弃审报行已打开、挂起或终止,不能再打开的错,暂未去研究。
2、在v2.8下测试,则调用正常。
V2.5(培训版)升级后无Lincense的问解决:
1、升级前,先备份(培训版Basedll):
UFIDA.UBF.SystemManage.Base.dll;
a)同时备份:
35(注意看是否为适合vs2005调试模式而改名了),web.config,以备用;
2、升级后,也备份(权限版Basedll):
40,web.config,以备用;
3、停止UFSysManageService_2.1服务,使用培训版Basedll覆盖权限版Basedll;
4、重新启动UFSysManageService_2.1服务,重启iis,即可继续使用U9。
升级后可能出现的错误:
1、未能从程序集System.ServiceModel...中加载类型System.ServiceModel.Activation.HttpModule。
解决:
检查Internet信息服务管理器中,应用程序池U9AppPoolCLR4,
.netframework版本若为v2.0,则portal下web.config需覆盖还原为升级前备份的那个web.config;
.netframework版本若为v4.0,则portal下web.config需覆盖还原为升级后的40。
如果仍未解决,则进入此目录c:
\Windows\Microsoft.NET\Framework\v4.0.30319>
,管理员用户在cmd命令中运行aspnet_regiis.exe-i–enable,表示安装.netframework4.0。
2.Session
2
2.1Session的概念
在现在UBF中,Session的本意是workunit,即持久层的一个边界,非常轻,主要用作批量提交,并标识这次批量提交的边界,不涉及到事务等概念。
当前ISession可以通过Session的Current属性获得,每调用一次Session的Open方法,Current属性都会被更新。
2.2Session的使用
using(ISessionsession=Session.Open()){
...
session.Commit();
//提交更改,但只是Session范围内的修改更新
2.3Session嵌套
当发生session嵌套的情况时,每次提交都是真正提交
示例:
using(ISessionsession1=Session.Open()){
using(ISessionsession2=Session.Open()){
session2.Commit();
//提交更改,但只是Session2范围内的修改更新
session1.Commit();
//提交更改,只处理Session1的修改更新
2.4实体新建
新建实体实体的操作分为主实体的新建和非主实体的新建,如果是主实体新建,用不带参数的Create方法,如果是非主实体的,用带上级实例参数的Create方法。
举例:
using(ISessionsession=Session.Open())
A_Com1c1objA=A_Com1c1.Create();
objA.Code_A_Com1c1=1000;
objA.Name_A_Com1c1="
objA“;
B_Com1c1objB=B_Com1c1.Create(objA);
//B为A的子实体
objB.Code_B_Com1c1=1001;
objB.Name_B_Com1c1=“objB”;
2.5实体更新
using(ISessionsession=Session.Open()){
Customerobj=Customer.Finder.FindByID(id);
if(obj!
=null)
obj.Name="
newname"
;
session.Modify(obj);
......
}
2.6实体删除
对于组合关系,如果删除主实体,那么,主实体下面的所有子实体,孙实体会被级联删除,对于非主实体的删除,可以用子集合的RemoveAt和Remove(entity)方法,这2个方法等价,例如
A_Com1cNobjA=A_Com1cN.Finder.FindByID(aID);
objA.B_Com1cN.RemoveAt(0);
//或用下面的方式:
B_Com1cNb=Com1cN.Finder.FindByID(bID);
objA.B_Com1cN.Remove(b);
session.Commit();
3.实体查询方式
3
3.1实体的查询类Finder
返回强类型的对象
常用方法:
Find,FindByID,FindAll
举例
OqlParamListpList=newOqlParamList();
stringstrOql=“Code=@Code"
pList.Add(newOqlParam(“Code”,“11”));
Customer.EntityListlist=Customer.Finder.FindAll(strOql,pList.ToArray());
3.2EntityDataQuery
EntityDataQuery主要用于希望返回结果是IDataReader,DataSet,单值的情况
创建方式:
1、通过Entity对象:
EntityDataQueryq=Customer.Finder.CreateDataQuery();
2、通过EntityFullName:
EntityDataQueryq=newEntityDataQuery("
UFIDA.U9.CBO.SCM.Customer.Customer"
EntityDataQueryq=newEntityDataQuery(Customer.EntityRes.BE_FullName);
返回DataSet:
FindDataSet
1、全OQL方式
DataSetds=
q.FindDataSet(“selectID,Name,CodefromUFIDA:
:
U9:
CBO:
SCM:
Customer:
Customer"
2、条件OQL方式
DataSetds=q.FindDataSet("
ID>
1"
返回IDataReader:
FindDataReader
IDataReaderdr=q.FindDataReader("
selectID,Name,CodefromUFIDA:
IDataReaderdr=q.FindDataReader("
返回单值:
q.FindValue("
selectMax(ID)whereid>
111"
分页查询:
DataSetds=q.FindDataSetByPage(1,2,"
ID>
@IDandName=@mmmorderbyID"
3.3EntityQuery
主要用于希望返回的结果是实体(弱类型)
以强类型的方式使用Customer.Finder,其对外接口和功能与EntityQuery类似,只是Customer.Finder返回强类型的对象,EntityQuery返回弱类型的对象。
EntityQueryeq=Customer.Finder.CreateQuery();
EntityQueryq=newEntityQuery("
EntityQueryq=newEntityQuery(Customer.EntityRes.BE_FullName);
返回实体:
FindByID和Find
FindByID,先从缓存加载对象,如果缓存没有,则从数据库加载对象;
Customera=Customer.Finder.FindByID(a.ID);
Customera=(Customer)eq.FindByID(a.ID);
Find方式,直接从数据库加载,然后查缓存,如果缓存有,用缓存对象替换;
Customer.Finder.Find(“ID=@ID”);
eq.Find("
ID=@ID”);
返回实体集合
条件OQL方式:
q=newEntityQuery(Customer.EntityRes.BE_FullName);
q.FindAll(“ID>
1"
3.4EntityViewQuery
报表中用。
4.第三方程序(DotNet平台)以Web方式调用U9SV
4
4.1找到所需的服务
查询集团文档或利用SQL语句结合查询,如:
select
b.DisplayNameAs[类显示名]
a.FullNameas[类全名]
c.AssemblyNameas[程序集名]
c.Kindas[组件类型]
d.DisplayNameas[组件显示名]
fromUBF_MD_Classasa
leftjoinUBF_MD_Class_Trlasbona.Local_ID=b.Local_ID
leftjoinUBF_MD_Componentascona.MD_Component_ID=c.ID
leftjoinUBF_MD_Component_Trlasdonc.Local_ID=d.Local_ID
where(1=1)
and(c.Kind='
SV'
)
andB.DisplayNamelike'
%创建%物料%'
(U9的服务均在Portal\Services内)
4.2测试服务是否可用
以创建物料(料品)的服务为例,IE地址栏中输入(第一次加载比较慢):
//vml-win2008r2/u9/services/UFIDA.U9.ISV.Item.IBatchCreateItemByDTOSRV.svc
4.2.1可能的出错情况
服务不可用时,可能会出现的情况:
1、提示:
配置错误无法读取配置文件,因为它超过了最大文件大小
MaxWebConfigFileSizeInKB.reg>
修改注册表
WindowsRegistryEditorVersion5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InetStp\Configuration]
"
MaxWebConfigFileSizeInKB"
=dword:
00000000
(可把以上内容,粘贴到txt文件中,注意靠左,然后修改txt文件为reg文件,双击reg文件进行注册即可)
注册后需重启iis。
如仍出现这个问题:
运行->
inetmgr->
应用程序池->
DefaultAppPool->
设置应用程序池默认设置->
启用32位应用程序->
False;
2、之后,还有可能出现MIME映射问题;
提示:
由于扩展配置问题而无法提供您请求的页面。
如果该页面是脚本,请添加处理程序。
如果应下载文件,请添加MIME映射
执行:
\Windows\Microsoft.NET\Framework\v3.0\WindowsCommunicationFoundation\ServiceModelReg.exe-I
(建议在命令窗口内执行)
作用:
安装此版本的WindowsCommunicationFoundation......
4.3生成代理类
Svcutilhttp:
//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”个参数的重载
在报错的相应位置的类里面添加
publicServiceExceptionDetail(Exceptionexception):
base(exception){}
4.6项目实现细节
4.6.1调用服务框架代码
privatevoidbutton1_Click(objectsender,EventArgse)
button1.Enabled=false;
//实例化代理类
UFIDAU9ISVItemIBatchCreateItemByDTOSRVClientclient;
client=newUFIDAU9ISVItemIBatchCreateItemByDTOSRVClient();
//返回异常信息,目前还没有使用此属性
UFSoft.UBF.Exceptions1.MessageBase[]returnMsg;
//上下文信息
objectcontext;
www.ufida.org.EntityData.UFIDAU9CBOPubControllerContextDTODatacontextdto1=newUFIDAU9CBOPubControllerContextDTOData();
//该服务的返回结果
www.ufida.org.EntityData.UFIDAU9CBOSCMItemItemMasterData[]returnItems;
//该服务的传入参数
UFIDAU9ISVItemItemMasterDTOData[]itemMasterDtos;
//给上下文信息赋值
context=CreateContextObj();
contextdto1=CreateContextDto();
//给传入参数赋值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- U9 API 课程讲解资料 v07 课程 讲解 资料