第一篇:C#开发机战游戏实习报告
实习报告
5月28至6月20日,我们网络工程专业分三个地点进行生产实习,包括主要讲c#方向的足下,讲java方向的NTT data还有C++和Andorid方向的达内。我综合分析自身三年的学习,选择了位于西永的足下科技有限公司,进行c#方向的实习。
足下科技有限公司,主要从事服务外包软件开发和与大学联合开展实训工作;公司面积逾20000平方米、电脑设备1000多台、多媒体教室30多间、专业服务器20多台、专业图书近万本,致力于为社会培养更多、更实用、更优秀的专业人才。
本次实习,我们的主要任务是在项目经理的带领下,先回顾编程语言及面向对象的基本知识点,再从简单的打字游戏练起,一步一步,最终开发出一个具有可玩性的机战游戏,并以小组为单位在公司进行综合展示,将自己的团队自己的产品推销了去。
按时间的划分,可以将本次实习分为实习正式开始前的准备阶段、正式实习阶段,准备阶段从5月28日到29日上午,这一阶段先由项目经理给我们简要介绍了足下,让大家对足下,对所谓的IT的职场有一定的认识,然后进行团队划分,每个团队取出自己的团队名、团队口号、团队队歌并确定自己团队在接下来近一个月的实习期间的实习目标。让每一个人都清楚自己的努力方向,然后严格要求自己,努力实现自己既定的目标。所有这些准备工作的就绪了,就开始了我们的正式实习。我们的团队取名心之力,引用毛主席当年的同名文章《心之力》之名,里面说到:“天之力莫大于日,地之力莫大于电,人之力莫大于心。阳气发处,金石亦透,精神一到,何事不成?”其中的精神,就是指心力,必力一到,何事不成?同时,我们来到足下,公司的总监也一直在强调,学习的第一条件是用心,用心了,没有办不成的事。所以,我们取名心之力。我们的口号是:“发我心力,一往无前”。队歌是改编版的《团结就是力量》——团结就是力量,团结就是力量。这技术是铁,这心力是钢,比铁还硬,比钢还强,向着飞行大战开火,把一切技术难题全部灭亡。向着胜利,向着太阳,向着重理工发出万丈光芒。
实习正式开始后,又可根据实习内容的不同分为三个阶段。
第一阶段从5月29日下午到6月1日,这一阶段主要是对编程语言基本语法及数据库相关基础的一些回顾,主要目的是为之后的项目开发作基础知识的准备,大部分同学都很久没有编程了,很多基本的语法都忘记了,这个阶段对某些同学可能是浪费时间,但对整体而言,确实有利于后期项目的开发。
周末休息两天后,开始了第二阶段的任务,从6月4日到6月7日,这一阶段主要是对面向对象理论的讲解然后开发一个打字游戏用以充分理解面向对象编程。对于面向对象,第一个要解决的就是什么是面向对象,将“面向对象”按语义划分,可分“面向”和“对象”,什么是对象,事间的万事万物都是对象,一台电脑是一个对象,一个人是对象;将一台电脑进一步划分,电脑的主机、显示器、鼠标、键盘又是一个一个分别的对象。对于这些对象而言,都有一个抽象的描述,包括这样的对象有什么样的属性,能完成什么要的任务等。这个抽象概念让为们明白这是什么,但它不能等同于一个具的实际存在的事物。如我们描述人,就是一个抽象的概念,人有肤色、年龄、出身地点、国籍等属性,人又可以发生吃、喝、睡等动作,人这个抽象概念就让我们明白了人到底是什么,却不指某一个具体的人,小张、小李,这样具体的某一个人,是人这个抽象概念的具体化的一个实体。“对象”,就是小张、小李这样的具体化的实体,用来描述某个对象的属性、行为等就要用到用于描述这些的抽象概念。“面向”可理解为面对、朝向,加在一起,“面向对象”就可以理解为面对着以上所讲述的“对象”一种描述事间万事万物的一种方式。接着,对于学习IT的我们,就要理解什么是面向对象编程,通俗一点,面向对象编程,就是使用以上所认识到的面向对象的思维,用于计算机程序的开发。第一个问题所说的描述对象的那种抽象概念,在面向对象编程中就是“类”,类可以用成员变量来描述一种对象的属性,用方法、事件等来描述该对象的行为。类并不是一个实体,不开辟内存空间,将类进行实例化就形成了实体、开辟了内存空间。解决了以上两个问题,就要进一步认识面向对象编程,包括变量类型、变量数据类型、封装、多态、继承等,有了对前两个问题的认识,这些问题的掌握,我们变得更为简单。将面向对象的理论知道学习后,我们在项目总监的带领下,开发了一个打字游戏,用实践来更进一步理解面向对象,在6月7日结束前,所有人都单独实现了这个打字游戏。之后,大家回学校考了《毛泽东思想及中国特色社会主义理论体系》,等待第三个阶段的开始。
第三个阶段从6月11日至6月20日,中途周末大家回校考英语四、六级。在前两阶段的基础上,大家基本都能进行面向对象编程的开发了,接下来的任务都非常明确——机战。项目总监只花了两个上午给大家讲机战的几个核心技术,其他时间就由大家自由发挥了。机战的核心技术其实只有一个,GUI+,用timer控件每0.33秒刷新一次画面,用GUI+技术在每一次刷新中重绘Form窗体中的图形。技术掌握清楚后,更多时候靠的就是细心的设计、开发、调试及错误的测试及解决。相比于以前,因为来到了公司,大家都更为认真,可能还有是开发游戏的缘故,大家都比较感兴趣,所以我们去的每一个人都认认真真地完成着自己的任务。
实习阶段的最后一天,大家都作好了准备,等待项目的验收,即实习过程的答辩。答辩最终是以团队为单位进行,答辩只讲解一份作品。我们团队每个人都完整实现了机战的各项功能,当中各有特色。我们采用的方式是将每个人作品中优秀的部分截取出来,组何到一个项目当中,成为全队共同的作品进行展示。虽然我们的作品相对于其他组,可能画面没那么绚丽,但凭借团队内大家携手努力,功能的大力扩展以及答辩过程的充分发挥,我们团队取得了本次作品同答辩第一名的成绩。
通过本次实习,对个人而言,最大的收获莫过于对面向对象编程的进一步学习理解,以及实习项目开发中对于面向对象思想的应用,让面向对象编程的思维在自己的脑海里扎根。以前虽然也知道面向对象,知道面向对象编程,但大多数时候更理解为用面向对象编程语言进行程序开发,只要是用到C#,用到java,那就叫面向对象。也知道面向对象编程的核心思想如封装、继承、多态等,但真正开发的时候用到的很少,不管什么东西,能在一个类里写完绝对不会多用另一个类,导致程序的可读性、扩展性都非常差。而通过本次实习,项目经理先再次讲解面向对象的思想,再在程序的开前教给大家,程序的开发过程中严格要求大家做到用面向对象的思维来实现程序的开发。通过这样理论和实际的相互结合,大家在开发程序过程中真正学会了如何划分功能模块进行封装、如何使用继承,如何使用多态。
对于实习的全过程,除开编程方面的理论与实践,最大的收获应该是一种体验。这不仅仅是学习两个字就能收获到的。包括公司的作息习惯,工作任务的完成方法,人际关系的处理等等。总的说来,感觉公司比学校里实际多了,学校里你可以我行我素,出了问题老师会帮你想法解决,同学朋友会包容你安慰你,但在公司里不再如此,出了问题,那就会直接跟工资、职务的进升挂勾,个人不得不谨小慎微。另外,还听项目经理助理说了一些工作中老板面前、同事面前的不同,如一个任务,老板面前,正常需要五分钟能完成的,一定要三分钟完成,而在同事面前,能五分钟完成的一定会边耍边做10分钟完成。因为老板面前要挣表现,以便得到赏识;同事面前没那必要,而且自己做完了余下的时间还要帮别人处理,同样辛苦,还不如一边把节奏放慢点,让自己轻松点。当老板问到任务是否艰巨时,想方设法都要夸大一点任务的难度,让老板知道你的辛苦,还是为了得到赏识。只有老板赏识才会有加工资,才会有职务的上升。写下他说的这些,并不是我会按他这样做,只是通过这些,让我深刻地感受到职场跟学校的不同,觉得曾经的自己太单纯了。
完成了实习,有了职场的体验,内心有向往,但我不会立即工作。我下定决心考研,因为对于人生的领悟还不够,进入职场只会让我变得现实,被里面同化,忘记自己的梦想。我有我的梦,现在还有犹豫,进入研究生再深造几年,学得越深,才会越坚定!对于实习的意见,我觉得实习的任务还是轻松了点,可能对于某些基础相对不那么好的同学而言任务确实比较适中,但这对于基础好的同学相当不公平。刚进大学时,对于计算机,大家的基础是相当的,经过三年的学习,有的人学得比较好,有的人学得比较差。这并不是觉得好的人比学得差的人聪明,而是学得好的人比学得不那么好的人更用心。这可能跟家庭因素,跟个人对人生的目标有关。有的人觉得人生平平淡淡有份稳定收入就好,有的人想要创造更高的人生价值。这些到现在,就是进实习公司时大家的基础,基础差的人对于计算机的迷恋肯定远不及基础好的人,但学校却硬要让基础好的人去等差的人,还是那句话,相当不公平。实习的第一个周,说好听点叫巩固基础,说难听点就叫浪费时间。一个周,就学for循环、学if、else,大一就该熟得不能再熟的东西大三时总共三周实习要花一个周来学。希望学校、老师能综合考虑,让每一个人都能有自己想要的更多的收获。
第二篇:C#程序员实习报告
C#程序员实习报告
摘要
实习是一名毕业生提高自己对社会的适应能力和认知能力的一个及其重要过程,在这个过程中,理论结合实际,把大学学到的知识应用到实践中,让自己迅速适应社会,达到IT前进的快速步伐的要求。实习过程中通过理论联系实际、学校与社会之间的过渡,实现进一步提高学生的思想觉悟、适应社会能力、学习能力、业务水平,尤其是观察、判断和解决问题的工作能力,从而培养自己能够成为一名适应现代化建设和发展需要的高素质高才能的复合型人才。1 实习的目的和意义
1.加强和巩固理论知识,发现问题并运用所学知识分析问题和解决问题的能力,通过实习使学生获得基本生产的感性知识,理论联系实际,扩大知识面。
2.锻炼自己的实习工作能力,适应社会能力和自我管理的能力,锻炼和培养个人的业务能力及素质,培养当代大学生吃苦耐劳的精神。
3.了解实习单位的计算机技术的应用情况、需求情况和发展方向及前景,同时让学生接触社会、了解产业状况、了解国情,逐步实现由学生到社会的转变,培养我们初步担任技术工作的能力、初步了解企业管理的基本方法和技能。
4.亲身参与项目的实际完成工作,了解计算机专业软件开发的具体流程。
5.通过实习来认识了解自己,发现不足,提前做好自己的职业规划,为自己的未来道路画上浓厚的一笔。实习的岗位及工作情况介绍
2.1 实习单位简介
厦门市智业软件工程有限公司创建于1997年,目前已拥有180多名高素质IT员工,专业提供卫生医疗行业信息化整体解决方案。智业公司总部设立在美丽的鹭岛——厦门,同时在国内设立了北京、广州、重庆、沈阳、合肥和乌鲁木齐共6个全资分公司,和多家办事处机构。
智业公司产品线基本涵盖卫生医疗全行业信息化领域,包括:医院信息系统(通过卫生部信息化领导小组评审鉴定、国家级火炬计划项目产品)、城市电子病历系统、城市健康体检信息系统、区域卫生信息化平台(国家十一五科技支撑计划项目产品)、城市妇幼保健信息系统平台(科技部中小科技企业创新基金项目产品、福建省发改委科技成果转化扶持项目)、城市社区医疗信息系统平台、区域中小医疗机构信息系统平台、医学影像存储与传输系统、实验室信息系统、医疗集成平台系统等,目前拥有数百家各级医疗机构用户。
智业产品在国内率先开发了一卡通预交金模式,推出了一系列医院就诊流程优化再造的信息化措施,并在国内率先引入了医保卡、银行卡的一卡通模式等,另外还较早地迈向了临床信息系统(CIS)的开发领域,推出了结构化的电子病历系统、临床质控系统、医学科研检索系统、临床移动工作站等系统。智业产品
不仅适用于各类国有大中型医院,还因产品的高度灵活性和强大细腻的功能设置,而被国内多家大型股份制/民营医院所选用。
2000年起,智业在国内首家开发了区域妇幼保健信息共享服务平台系统,当年即获科技部中小科技企业创新基金的大力扶持。智业还与厦门市妇幼保健院联合中标了《中国妇幼保健标准体系和共享服务研究》的国家课题,成为六家中标单位之一。截止目前,厦门市妇幼保健信息系统平台仍是国内唯一成功运行的城市级妇幼保健信息系统平台,厦门市由此成为全国妇幼保健信息化示范城市。2006年,智业开发的厦门市市民健康信息系统一期成功运行,是国内首个(目前唯一)运行的城市级卫生信息化共享服务平台。至2008年底,该项目三期均已顺利完成。2009年2月28日,[国家十一五科技支撑计划项目区域卫生信息化支撑系统厦门示范区]——厦门市市民健康信息系统正式启动,该系统已被认为是“我国区域卫生信息化建设迄今为止最为成功的实践蓝本”(新闻联播报道)。该系统是一套基于区域协同医疗,以居民健康档案信息为基础的卫生信息共享与服务的系统平台。主要建立一套可推广可移植的、能够初步解决“看病难”、“看病贵”、“看病乱”的区域协同医疗公共服务集成平台和运行机制,为创建全新的符合国家新医改政策的现代医疗服务模式提供强大的信息化技术支撑能力。系统内容涵盖市民从生命孕育的那一刻起,直到生命消逝的那一刻止,有关这个生命的所有健康信息,以及其父系和母系的家族健康史。厦门市市民健康信息系统已建立完善了100多万份市民完整的个人健康档案,建档数量居于全球首位。目前,厦门市已成为我国区域卫生信息化建设的示范城市,并成为了国家新医改的首批试点城市。
2.2 工作岗位介绍
我的工作岗位是区域运营中心的C#程序员,公司对本岗位的要求如下: 职位描述:
在项目经理的带领下,根据客户需求开发程序。
岗位要求:
1、计算机相关专业本科学历或以上;
2、熟练使用C#,精通基于ASP.NET的WEB开发;
3、有较强的软件开发过程评估和控制能力,有良好的代码书写规范;
4、逻辑思路清晰,工作认真负责,良好的团队合作精神;
5、能够独立高质量的完成工作,具有较强的领悟力;实习内容及相关技术的介绍
3.1 实习内容
对市民健康网进行了解改造。
包括以下内容:
一、改造目的智业软件的厦门市民健康信息系统(网站),是居民健康信息系统的一个重要组成部分,承载着市民健康系统对外展示市民健康信息的重要职能,随着公司业务的不断发展,不断有新的项目需要部署。但原市民健康网的系统架构是针对
厦门单一区域定制开发的,在其它区域的实施过程中还需要根据需求不同进行针对性修改,给系统的部署、升级与维护带来诸多不便。为提高部署效率,方便系统的维护与升级,市民健康网的模块化定制开发已经迫在眉睫。
改造后主要能实现以下的功能:
网站通用信息的后台设置:含网站TITLE,META里的网站KEYWORDS,网
站DESCRIPTION,版权信息,联系方式,备案信息等;
网站主要功能链接(导航)的增删改;
根据需求,网站布局能够进行适当设置;
页面BANNER横幅的替换;
搜索引擎优化;
网站页面模板的选择(高级功能);
静态页面的生成机制;
改造后的目标:产品开发完成后,能在不同区域运用实施。部署时,只需在后台进行初始设置,如设定网站LOGO,TITLE,BANNER,页面风格。非必要下,不需要再改动源代码。功能升级或BUG改造,只需修改并上传BIN库里的DLL或页面风格模板。
3.2 相关技术简介
1.oracle技术
(1)Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。
(2)特点:
1、ORACLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了 ○
ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千个用户。
2、提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整○
性检查、安全性、一致性方面都有良好的表现。
3、○支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。
4、○提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC平台的应用程序,并具有良好的移植性。
5、○提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。2.webservice技术
(1)Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
(2)它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的webwebservice
应用程序分支,是自包含、自描述、模块 化的应用,可以发布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其他应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来访问Web Service,通过Web Service内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。
(3)Web services 可以把应用程序组件作为服务来提供,比如汇率转换、天气预报或者甚至是语言翻译等等。
使用 Web services,您可以在不同的应用程序与平台之间来交换数据 WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
WSDL 指网络服务描述语言
WSDL 使用 XML 编写
WSDL 是一种 XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务
WSDL 还不是 W3C 标准
UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。
UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。
UDDI 是一种用于存储有关 web services 的信息的目录。
UDDI 是一种由 WSDL 描述的网络服务接口目录。
UDDI 经由 SOAP 进行通迅。
UDDI 被构建于 Microsoft.NET平台之中
(4)WSDL 可描述网络服务(Web Services)
WSDL 指网络服务描述语言(Web Services Description Language)。WSDL 是一种使用 XML 编写的文档。这种文档可描述某个 Web service。它可规定服务的位置,以及此服务提供的操作(或方法)。
在 W3C 的 WSDL 发展史
在 2001 年 3 月,WSDL 1.1 被 IBM、微软作为一个 W3C 纪录(W3C note)提交到有关 XML 协议的 W3C XML 活动,用于描述网络服务。
(W3C 纪录仅供讨论。一项 W3C 纪录的发布并不代表它已被 W3C 或 W3C 团队亦或任何 W3C 成员认可。)实习结果
几个月的实习下来,让自己走进了一个全新的领域,开始了自己真正的工作生涯。实习无所谓结果而言,更确切的说,它是一个开端,一个让自己学会成长,学会飞翔的地方。不管是从职业道德,工作专业技能还是从为人处事方面,我都感觉到了有很大的提高。
首先,在职业道德方面,有强烈的责任心和事业心,敬业爱岗,积极主动的去学习相关专业知识,认真工作,态度端正,对不了解的,不懂的知识认真学习
和进行思考。
其次,专业知识方面,学习软件开发知识,webservice等架构知识,对个人开发能力等有很大的提高,让自己在激烈的竞争中保证优势。
最后,在与人共同交流方面,让我受益匪浅,特别感谢在工作,生活上帮助过我的同事和上司,是他们教育了我为人处世方面的待人更加诚恳,待事更加负责。实习总结
通过这次实习,基本达到了此次实习的目的,加强和巩固了理论知识,提高了发现问题并运用所学知识分析问题和解决问题的能力。锻炼自己的实习工作能力,适应社会能力和自我管理的能力。了解了实习单位的计算机技术的应用情况、需求情况和发展方向及前景。亲身参与了项目的实际完成工作,了解了计算机专业软件开发工作的具体流程。
虽然实习只有短短的两个星期,但是我的收获是很多的。从对项目相关的技术完全不了解,到和同事组成的团队一起克服种种困难,解决各种疑问,一起协同合作成功将软件调试成功。“实践是检验真理的唯一标准”,没有实践何来了解、进步之说。我的感触颇深,古语有云:读万卷书,行万里路。古人将读与行并列甚至有偏重行的意味,这正是说明了实践的重要性。同事也深深的体会到实习的重要性和必要性。
这次实习不仅拓展了眼界,更为重要的是使我们了解了所学专业的现阶段发展状况及未来发展动向。总体来说目前计算机行业的发展前景,以及一些当今比较流行比较热门的技术,为我们的学习指明了方向,也将激励我们计算机专业学子更加努力地学好自己的专业知识,为今后的发展打好基础。
同时,在这段时间我得到的最大体会就是,如果一个人在社会上没有一技之长,那他是没有办法很好的活下来的。工欲善其事,必先利其器。而对于我们来说,扎实稳固的技术就是我们走上工作岗位,实现人生梦想、自我价值以及在竞争越来越激烈的今天立足社会的最好利器,只有不断的加强自身专业技能学习才行。所以,我会在以后的时间里努力学习,加强自己的专业能力,使自己变得更强,只有这样才能为自己、为父母、为学校交出一份满意的答卷。
实习生活暂告一个段落,闲暇之余,我开始静静地长思。通过这次实习,我认识到只有沉下身来,静下心来认真学习,踏实做事,多用心,多动脑,才能让自身能力有好的起色。社会的竞争是激烈的,我想我们应该好好把握住大学学习的时间,充实、完善自我,全面发展,做一名出色的IT精英!
参考文献
①史济民:《软件工程》,北京高等教育出版社,2002.12;
②常永英:《ASP.NET程序设计教程(C#版)》,机械工业,2007.09;
③宋 玮:《软件工程教学的思考》,广东工业大学学报(社会科学版),;
④Benjamin Rosenzweig[美] :《ORACLE PL/SQL实例精解》,机械工业,2009.06; ⑤凯特(美):《ORACLE 9I&10G编程艺术》,人民邮电,2009.07;
第三篇:《C#项目开发》教学大纲
《C#项目开发》教学大纲
一、课程的性质和任务
1.课程的性质和地位 本课程是高职计算机专业的一门专业课程。2.课程的任务 主要任务是介绍C#项目开发的基本方法,使学生掌握一门高级程序设计语言,能够开发小型项目,并为后续的专业课程奠定程序设计基础。
二、课程的基本要求 1.课程总体目标 本课程总体目标是使学生掌握一门高级程序设计语言,熟悉C#语言的基本语法,掌握ADO.NET基本概念,熟悉项目开发的方法,能够开发小型项目。2.知识要求(1)熟悉C#语言的基本语法。(2)熟悉C#项目开发的方法。3.能力要求 通过对本课程的理论和实践教学,应能使本专业的学生掌握面向对象程序设计的理论知识和应用技能,锻炼学生进行项目开发的能力。通过教学应使学生获得以下面的知识和能力。(1)能正确安装和配置.NET的运行环境,能独立完成教学基本要求规定的实验。(2)能熟练使用软件集成开发环境Visual Studio.NET,会使用调试工具调试应用程序。
(3)能开发基于C#的小型项目。4.实训要求 每人一台微机系统、Visual Studio 2010、Access 2003数据库管理系统、SQL Server 2008及以上版本数据库管理系统。5.课外作业要求 要求学生课外完成,记入考核成绩。6.考核要求
学生能独立或者以小组形式完成C#项目开发。
三、课程内容
项目1 用户登录程序 【学习目的】、了解.NET框架及C#语言了解Visual Studio 2010的集成开发环境的安装、掌握Visual Studio 2010的集成开发环境的基本使用、掌握Windows窗体应用程序的创建步骤、掌握窗体、标签、文本框、按钮的基本属性、方法和事件。【教学内容】 1.Visual Studio 2010编程环境。2.Windows窗体应用程序设计流程。3.窗体和基本控件的使用。4.设计用户登录程序。项目2 四则运算计算器 【学习目的】 掌握变量的使用方法、熟悉Visual C#语言的数据类型、掌握运算符和表达式的使用方法、。掌握流程控制语句使用方法、掌握方法的使用方法【教学内容】 1.常量与变量。2.数据类型及转换。3.运算符与表达式。4.条件判断语句。5.循环控制语句。6.异常处理。7.设计简单四则运算计算器。8.设计复杂四则运算计算器。项目3 客户问卷调查程序 【学习目的】 掌握RadioButton控件的使用方法、掌握CheckBox控件的使用方法、掌握ListBox控件的使。用方法、掌握ComboBox控件的使用方法、掌握GroupBox 控件的使用方法【教学内容】 1.。RadioButton控件2.。CheckBox控件3.ListBox控件。4.ComboBox控件。5.GroupBox 控件。项目4 酒店客房管理系统
【学习目的】、掌握Windows窗体应用程序的创建的方法掌握应用系统数据库设计方法、掌握ADO.NET。的应用方法、掌握类的设计方法、掌握应用系统的设计方法【教学内容】 1.系统功能总体设计。2.建立系统数据库。3.创建公共类DBHelper。4.系统详细设计。项目5 软件项目实训 【学习目的】。熟悉系统开发的过程、掌握系统开发的方法、掌握系统开发中的程序调试方法【教学内容】 1.选题。2.软件项目开发。
四、教学方法 教-练-考紧密结合的教学方法,多媒体教学、上机实践、课程设计、网上自学等方法。
五、教学时数分配 序号 教学内容 合计课时 讲课课时 实验课时 4 2 2 1 项目1用户登录程序 8 4 4 2 项目2四则运算计算器 4 2 2 3 项目3客户问卷调查程序 32 16 16 4 项目4酒店客房管理系统* 16 2 14 5 项目5软件项目实训* 64 26 38 合 计
六、教材及参考书 教材: 《isual C#程序设计与软件项目实训》,郑伟 谭恒松编著,2015年1月,电子V工业出版社。(注:教育部“十二五”职业教育国家规划教材)参考书:《C#程序设计与开发(第2版)》,谭恒松主编,2014年7月,清华大学出版社。(注:高职高专精品教材)
七、说明
1、根据学生的不同情况,带*内容:可以适当增加课时。
第四篇:C#实习总结
现在的社会日新月异,科技飞速发展,但是随之而来的环境问题也日益严重,当然这也有很多其他诸如人口、能源等因素,不过这些让人们越来越重视绿色产业,而软件就是首当其冲的一个。我积极参加了学校组织的软件实习,主要是对.Net方面的实训和实战,一方面想要继续深造之前在大学里面学习的软件方面的知识,另一方面,也是为了自己的职业规划,说直接点,就是以后找份好工作。虽然实训中时间安排有点紧,但很充实,学到了很多之前在大学课堂上没有学到的知识,可以说我从这次实训中的收获很大。
对于计算机编程,我可以说从高中就开始接触,大学从专科开始一直学习的都是软件开发的专业,学过C#、Java,学过开发,也学过测试。但是这次实训让我体会了和之前完全不同的学习感受,不仅是时间安排、或者说效率还是教学授课的方式上,都是和大学课堂完全不同的,不是一节课讲一点,也不是一点一点教给你,这个实训中更多的是培养我们独立动手解决实际问题的能力,分析考虑问题的方法思路,让我们真正成长起来。
学校为我们提供了良好的学习的平台,提供了好工作的面试机会。我们觉得我们更应该充分利用资源,珍惜机会,努力学习,不断地给自己“充电”,这样才能不断的开拓进取,勇于创新,才不至于被社会淘汰。
这次实习中,我们主要有S0、S1、S2三个阶段,S0阶段主要是自学C#基础知识,S1阶段是在老师的指导下学习C#基础编程、C#桌面应用开发、C#数据库应用开发、C#网络应用开发、软件测试和软件工程几个方面的技术方面的课程,S2阶段则是进入项目实战,做实际项目来进行巩固和总结。整个过程中,还有穿插了职业素养课和英语口语课,学技术的同时,我们也注重职业素养的培养和英语口语的锻炼。
到目前为止,我们实习的主要成果有(按时间顺序):Point24(24点游戏求解小程序)、HandsUp(举手游戏模拟小程序)、SimpleCalculator(简单计算器)、GottaU(捕捉鼠标小游戏)、TypeGame(打字小游戏)、WebBrowser(简易网络浏览器)、Checker(单机对战跳棋小游戏)、MDITextEditor(多文档界面文本编辑器)、FileManager(文件管理器)、SimpleMediaPlayer(简单媒体播放器)等,这些小程序或是项目,虽然和市面的那些软件比起来,在功能强大、界面美观、Bug稀少等方面都有欠缺,但是都是实打实的,我们自己动脑、动手做出来的,当然在做的过程中遇到了不少困难、挫折,但是正因为这些困难和挫折,我们才真正学到了知识和技术。更值得注意的则是,在老师带领我们做项目的过程中,我们从老师的言传身教中学到了很多很多编程思想、解决问题的方法思路等各种“无形”的知识。
众多收获之中,让我感触颇深的,则是老师给我们介绍的“10-90”原则和“Quality-Client-Cost”原则。“10-90”原则的意思是,我们通常都是花10%的代价就可以完成一件事或者一个项目的90%,而剩下的10%,却需要我们花费90%的金钱、精力等各种代价,能不能做到这最后的10%,往往是衡量一个人或者一家公司很重要的一个原则。而且这个原则还是可以嵌套的,最后10%的部分中,也可以再分成90%和10%,同样是开始的90%需要10%的代价,最后的10%需要90%的代价。这个原则不仅适用于做软件、做项目、做公司,其实人生中做人也是如此,很多时候最后的10%是很重要的一把标尺。虽然不能说这个原则放之四海而皆准,但是确实是适用于很多地方、很多方面,让我获益良多。“Quality-Client-Cost”原则讲的则是做软件或是做软件公司的一个原则,就是质量一定要放在第一位,客户在第二位。我自己原本心目中对这三项的排序是Client-Quality-Cost”,但是老师的讲解点醒了我,最具有说服力的例子,就是像微软这样的大公司,都是Quality第一的,他们宁可花费多一些,价格贵一些,但是一定把产品尽善尽美。这个原则同样可以用在人生中,Quality就是人品、品德、素质,Client是朋友、客户、亲人,我们当然应该把个人的品格放在第一位。这些都属于这次实习中,我在技术以外的收获。
另外在实习还有职业素养课中,也学到了很多其他在今后的工作中,要注意的东西,首先要有团队合作精神,现金的大中型软件的编写,分工越来越细,这样在开发、测试的过程中,团队的合作、成员间的交流就变得尤为重要,是决定效率的重要因素;要学会独立解决问题,工作不比在学校学习,遇到的各种实际问题不会有老师专门帮助解决,自己独立分析、解决问题的能力就变得极其重要;要有创新精神,在工作和学习中,如果只是一味的模仿、学习,那就永远不会真正得学得得心应手、融会贯通,必须自己去实践,在实践中创新,这样才能把学来的,变成自己的;要有耐心,学会自我规划和管控,耐心自是不必多说,有耐心才能把事情仔细做好,而公司的管理制度和学校根本上的不同,使得自我规划和管控就成了能否按时圆满完成任务的很重要的条件。
通过这次实习,我在个人素质方面有较大的提高,不仅是在C#的技术方面,还包括面对、分析和处理问题的思路、能力,思维的创造性和全面性,交流和沟通能力,英语口语水平,同时也克服了一些自己的缺点,获得很大进步。
总的来说,这次实习对我有很大意义,不仅巩固和实践了之前在大学课堂上学到的各种知识,扩充了自己对软件技术方面的知识储备,同时也给了我很大的成就感,增强了我的自信。并不是说因为我做成的很难的程序,或者做出来的软件很强很完善,但都是自己认真完成的,过程中有遇到各种困难和挫折,但是经
过网上查资料、小组讨论、向老师请教等几种途径,最终都克服了,当最终自己完成时,总会有一些成就感。
此外,我还人知到在以后的工作和学习中,不仅要努力学习和锻炼专业技能知识,包括C#技术、算法技巧、MVC模式框架的开发、中间技术等等,而且也要注意让自己兴趣广泛起来,拓宽自己的知识面,多积累各种知识,这不仅对以后的软件开发工作有一定好处,对自身的个人修养的提升也是大有裨益。
社会的竞争是激烈的,我想我们应该好好把握住大学学习的时间,充实、完善自我,掌握更多的专业知识,加强实践和设计能力,同时也注意全面发展,这样更有利于将来的发展,在自己的专业领域有所作为。
第五篇:U8API开发手册(C#版)
U8API开发手册
作者:商平锋
版权所有:用友软件股份有限公司 1.简介
U8API是为U8客户化应用开发提供的一套标准化的U8ERP业务编程接口。是U8UAP二次开发体系的重要组成部分。它包括一整套涵盖U8ERP采购、销售、库存、制造(规划中)、财务(规划中)、基本档案(规划中)等业务模块的API接口资源。U8API的推出为U8标准产品更好的适应用户的个性化需求,更好的实现客户化交付提供了有力支持。
U8API按照U8ERP业务产品模块进行分类,并以U8主要业务实体(单据、档案、凭证)作为操作对象,提供了常用的基本操作。比如:对于库存的收发单据,提供“新增”、“审核”、“弃审”、“删除”、“装载”、“修改”六个API接口。目前,U8API提供了供应链采购、销售、库存三个产品的所有单据的增删改、审核/弃审等API接口,后续版本会逐步将制造、财务、基本档案等模块的API纳入进来。
U8API通过“U8API资源管理器”对U8范围内所有API进行集中统一分类管理,形成了一套完整的U8API资源库。U8API的使用者可以使用“U8API资源管理器”浏览、查看API及其接口定义,并可辅助进行代码生成(目前支持C#和VB语言);API的开发者可以通过此工具发布、注册API,所有业务API都必须在“U8API资源管理器”中进行注册。
U8API还提供了一套运行时调用框架——U8APIBroker。它是所有U8API的调用代理,用户要使用某个API只需调用U8APIBroker即可,无需直接访问真正的API。U8APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。
U8API与U8EAI接口从功能上看比较相识,但它们的特性有差别。U8API采用传统的编程模型,更靠近底层,业务逻辑粒度更细,而且还需要或依赖一些特定的上下文环境,比如:login、事务等;而U8EAI接口则是完全松耦合的,采用XML和请求/响应的消息传递模式,且业务粒度比较粗放。这些特性的差别决定了它们的应用领域不同,U8API更适合于U8内部的功能扩展和客户个性化开发,而U8EAI则适合外部系统与U8之间以业务数据交换为特征的应用集成开发。
2.API应用
2.1.API总体应用过程
2.1.1 API浏览查找
在“开始”->“程序”->“用友ERP-U8”->“UAP”目录下找到“U8API资源管理器”,单击,登录,进入“U8API资源管理器”。在左侧 “U8API” 树形节点下,找到某某模块,如“库存管理”模块(可以看到下面列有很多个单据,如盘点单、采购入库单等),展开要操作的单据,分两个子节点:“事件”和“服务接口”,在“服务接口”下可以看到该单据提供的API接口,如“添加新单据”、“审核单据”等。双击这些节点出现该API的详细描述,如下图2.1所示。在节点上右键单击弹出“上下文菜单”,在“代码示例”菜单项上弹出下一级子菜单,单击它们,如单击“C#代码示例”则可以看到调用该API的C#示例代码,如下图2.2所示。直接拷贝这些代码,然后在集成开发环境(IDE)中编辑和编译这些代码,即能实现调用U8标准API。利用这些代码示例时,请按照其中每一步骤的提示说明正确操作,如添加必要的引用、按照自动生成的代码填入正确的参数等。正确使用则可以调用成功,否则会返回详细的错误信息。
以下代码中均以C#为例,VB语言请具体查看对应的VB代码示例部分。
图2.1 接口描述
图 2.2 代码示例 2.1.2 API调用过程 组件引用
针对两种语言,需要引用不同的组件。(1)C#:
%U8SOFT%InteropInterop.U8Login.dll、%U8SOFT%InteropInterop.MSXML2.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.dll、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.dll 如下图2.3、2.4、2.5所示。
(2)VB:
%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8APIFramework.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.MomServiceCommon.tlb、%U8SOFT%UFMOMU8APIFrameworkUFIDA.U8.U8MOMAPIFramework.tlb、添加Microsoft XML v3.0引用 如下图2.6、2.7所示。
其中,%U8SOFT%表示U8-872的安装目录。
图 2.3 添加对U8Login.dll引用
图 2.4 添加对Interop.MSXML2.dll引用
图 2.5 添加对U8API框架类库引用(.dll)
图2.6 添加对U8API框架类库引用(.tlb)
图2.7 添加Microsoft XML v3.0引用 API调用
添加必要的引用后,可以直接利用自动生成的代码示例(支持C#和VB两种语言),结合API接口详细描述,填入必要的参数值,就可以调用U8 API。
总体上,对U8 API的调用分成七个步骤: 1)构造u8login对象并登陆;
2)构造环境上下文对象,传入login,并按需设置其它上下文参数; 3)设置API地址标识(Url)参数; 4)构造APIBroker; 5)API参数赋值; 6)调用API;
7)获取返回结果。
详细的API调用过程请看下文“API内容”中各个模块中介绍的“开发步骤”。
下面重点介绍几个关键要点和步骤:环境上下文、API地址、APIBroker、普通参数赋值、BO参数赋值。
环境上下文
环境上下文指在调用U8API时需要初始化的调用环境,包括Login、事务、特殊的业务参数等。环境上下文被初始化后,相关的环境参数会被业务API使用。
U8EnvContext envContext = new U8EnvContext(); Login 需要将U8Login对象传递给环境上下文,U8Login对象必须已经登录过。envContext.U8Login = u8Login; 事务
如果需要由外部发起事务,则可以发起事务的ADOConnection对象传递给环境上下文: ADODB.ConnectionClass conn = new ConnectionClass();envContext.BizDbConnection = conn;同时需要设置一个外部事务标记:
envContext.IsIndependenceTransaction = true;
特殊业务参数
特殊业务参数指调用某些API需要设置的特定上下文参数,比如:销售的API必须要设置如VoucherType上下文参数,设置方法为: envContext.SetApiContext(“VoucherType”, 23);
API地址
API地址是指API在U8API系统中的唯一标识,也叫API的URI,调用API时,需要通过API地址构建一个代表此API的Broker对象:
U8ApiAddress myApiAddress = new U8ApiAddress(“U8API/PurchaseOrder/VoucherSave”);
APIBroker APIBroker是所有U8API的调用代理接口。使用U8所有API都必须通过APIBroker间接调用。APIBroker作为一个服务代理中间件,起到了隔离API的提供者与使用者的作用,降低了耦合依赖关系。创建APIBroker必须传入API地址和环境上下文:
U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
普通参数赋值
API参数分两种类型:BO参数和普通参数。普通参数是指非单据表头表体类型的参数,包括基本类型参数(String、Integer等)、知名对象参数(Connection、DOMDocument等)。普通参数的赋值采用如下方式:
broker.AssignNormalValue(“voucherState”, 2);
BO参数赋值
BO参数即单据表头或表体类型的参数。对BO参数,支持两种方式传入,一种传BO对象,另一种传DOM对象。以下分别介绍: 传BO对象
给BO表头参数或表体参数赋值,推荐使用BO对象(BussinessObject)。例如:
BusinessObject DomHead = broker.GetBoParam(“DomHead”);
/***************************** 以下是非必输字段****************************/ DomHead[0][“ipresent”] = “";//现存量,string类型 DomHead[0][”cmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”cmodifytime“] = ”“;//修改时间,DateTime类型 /****************************** 以下是必输字段****************************/ DomHead[0][”poid“] = ”“;//主关键字段,int类型 DomHead[0][”dpodate“] = ”“;//日期,DateTime类型 DomHead[0][”cpoid“] = ”“;//订单编号,string类型 DomHead.RowCount = 10;//设置行数,不设置也可
//给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义
„„
„„
在此种情况下U8 API框架会对BO对象各字段进行参数校验。对字段进行赋值时,值可以是真实类型,也可以是无类型字符串。 传DOM对象
给BO表头参数或表体参数赋值,也支持直接传入DOM对象(DOMDocument)。例如:
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);但是,在此种情况下U8 API框架不会对DOM对象进行参数验证。请在使用该方法之前,确保DOM对象的正确性。2.1.3 API典型应用场景 执行单一操作
单一操作指一项任务只需要一个API完成,比如:单据新增、审核/弃审、删除等单一操作。这是API调用最常见的场景,只需按照API的接口规范构造参数直接调用即可。
执行复合操作
复合操作,即一项任务由多个API的协作来完成。比如,自定义的单据维护界面的主要逻辑,一般由以下四个步骤构成:
1)加载单据;
2)在编辑界面上显示; 3)用户修改单据字段; 4)提交保存。
以上步骤需要进行两次API调用: 1)加载单据时候调用“加载API”,以获取单据BO对象(或原始DOM对象)并在界面上展现;
2)用户在修改单据时其实就是在修改BO对象,用户保存单据时调用“保存API”,此时要将此BO对象传给“保存API”(而不用构造新的BO对象)。
代码示例:
首先,登陆;
//构造u8login对象并登陆
U8Login.clsLogin u8Login = new U8Login.clsLogin();String sSubId = ”AS“;String sAccID = ”(default)@001“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陆失败,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;然后,通过LOAD接口获取BO对象;
//构造环境上下文对象,传入login,并按需设置其它上下文参数 U8EnvContext envContext = new U8EnvContext();envContext.U8Login = u8Login;//设置上下文参数
„„
//设置API地址标识(Url)
U8ApiAddress myApiAddress = new U8ApiAddress(“装载单据的地址标识”);//构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);//API参数赋值
broker.AssignNormalValue(”参数名“, ”参数值“);„„
//调用LOAD接口API if(!broker.Invoke()){
} //获取表头或表体的BO对象,如果要取原始的XMLDOM对象结果,请使用GetResult(参数名)BusinessObject DomRet = broker.GetBoParam(”表头或表体参数名“);//错误处理
Exception apiEx = broker.GetException();if(apiEx!= null){
} //结束本次调用,释放API资源 broker.Release();return;if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理
接着,BO对象经用户修改重新赋值,并传递给UPDATE接口提交保存;
//修改获取的BO对象,对需要更改的字段重新赋值 DomRet[0][”字段名“] = 新的字段值;„„
//重新构造“新增或修改”API的地址标识
myApiAddress = new U8ApiAddress(”新增或修改”API的地址标识“);//重新构造APIBroker broker = new U8ApiBroker(myApiAddress, envContext);//表头或表体参数赋值
broker.SetBoParam(”表头或表体参数名“, DomRet);//API参数赋值
broker.AssignNormalValue(”参数名“, ”参数值“);„„
//调用UPDATE接口API if(!broker.Invoke()){ } „„
最后,获取返回结果。
//获取普通返回值
System.String result = broker.GetReturnValue()as System.String;//获取out/inout参数值 „„
//结束本次调用,释放API资源 broker.Release();
2.2.API内容 2.2.1 采购管理
功能介绍
为了支持U8二次开发对业务单据的开发,本功能提供了实现采购业务单据各种操作功能的编程接口。使用采购管理的API开发接口,可以对库存管理中的采购到货单、采购普通发票、采购专用发票、采购订单、请购单、采购运费发票等单据进行审核、弃审、获取(或装载)、新增、修改、删除。
使用环境
必须安装.NET FrameWork 2.0; 必须安装U8-872版本的采购管理产品; 必须安装API适配器组件PUAPIConcrete.dll 接口说明
采购管理二次开发接口说明:
审核单据-ConfirmPO方法
参数:
domHead
—— 单据表头,DOM对象,必输 API上下文:
VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串
sBusType —— 业务类型:普通采购,直运采购,受托代销
弃审单据-CancelconfirmPO方法
参数:
domHead
—— 单据表头,DOM对象,必输 API上下文:
VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串
sBusType —— 业务类型:普通采购,直运采购,受托代销
装载单据-Load方法 参数:
DomHead
—— 表头DOM对象 domBody
—— 表体DOM对象 strWhere —— 过滤条件串 varVoucherID —— 单据主表ID strLocateWhere —— 定位条件串 API上下文:
VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串
sBusType —— 业务类型:普通采购,直运采购,受托代销
删除单据-Delete方法
参数:
DomHead
—— 表头DOM对象 domBody
—— 表体DOM对象
CurDom —— 返回DOM格式错误信息 API上下文:
VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串
sBusType —— 业务类型:普通采购,直运采购,受托代销
新增或修改新单据-VoucherSave方法
参数:
DomHead
—— 单据表头,DOM对象,必输 domBody
—— 单据表体,DOM对象,必输
VoucherState —— 保存状态,必输。2增加;1修改 ;0非编辑 curID
—— 返回单据头ID CurDom —— 返回DOM格式错误信息 UserMode —— 使用模式,0:CS;1:BS API上下文:
VoucherType —— 单据类型,具体类型参看API上下文描述 bPositive —— 红蓝标识:True,蓝字 ;False,红字 sBillType —— 为空串
sBusType —— 业务类型:普通采购,直运采购,受托代销
开发步骤
实现采购单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆
声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陆失败,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;
//登陆
String sAccID = ”(default)@001“;如果当前环境中有login对象则可以省去第一步。
2. 构造环境上下文对象,传入login,并按需设置其它上下文参数
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;//设置上下文参数
envContext.SetApiContext(”VoucherType“, new int());//上下文数据类型:int,含义:单据类型 envContext.SetApiContext(”bPositive“, new bool());//上下文数据类型:bool,含义:红蓝标
识:True,蓝字
envContext.SetApiContext(”sBillType“, new string());//上下文数据类型:string,含义:为空
串
envContext.SetApiContext(”sBusType“, new string());//上下文数据类型:string,含义:业务
类型:普通采购,直运采购,受托代销
//构造环境上下文对象 //传入login 如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:
envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 设置API地址标识(Url)参数
//如当前API“新增或修改”的地址标识为:U8API/PurchaseOrder/VoucherSave
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/PurchaseOrder/VoucherSave“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API对象参数赋值
1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是构造BusinessObject对象,具体方法如下:
//首先通过GetBoParam方法获取表头表体参数
注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。
/****************************** 以下是必输字段 ****************************/ DomHead[0][”poid“] = ”“;//主关键字段,int类型 DomHead[0][”dpodate“] = ”“;//日期,DateTime类型 DomHead[0][”cpoid“] = ”“;//订单编号,string类型 DomHead[0][”cvenabbname“] = ”“;//供货单位,string类型 DomHead[0][”cexch_name“] = ”“;//币种,string类型 DomHead[0][”nflat“] = ”“;//汇率,double类型 „„
/***************************** 以下是非必输字段 ****************************/ DomHead[0][”ipresent“] = ”“;//现存量,string类型 DomHead[0][”cmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”cmodifytime“] = ”“;//修改时间,DateTime类型 DomHead[0][”caudittime“] = ”“;//审核时间,DateTime类型 DomHead[0][”cauditdate“] = ”“;//审核日期,DateTime类型 DomHead[0][”cmodifydate“] = ”“;//修改日期,DateTime类型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数
//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义
„„
2)给普通参数赋值 例如,//给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参考服务接口定义
broker.AssignNormalValue(”VoucherState“, new int());注意:所有参数名不限大小写。
3)给“OUT型”参数赋值
为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。
如: „„
//该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取其值
//该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);„„
当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。
4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。
6. 调用API //示例调用如下:
if(!broker.Invoke())
{
//错误处理
Exception apiEx = broker.GetException();if(apiEx!= null){
if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理
} } //结束本次调用,释放API资源 broker.Release();return;注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。
7. 获取返回结果
1)获取BO对象
在“装载单据”时,通过GetBoParam方法获取表头或表体参数
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。
//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义
/****************************** 以下是必输字段 ****************************/ int poid = Convert.ToInt32(DomHeadRet[0][”poid“]);//主关键字段,int类型
DateTime dpodate = Convert.ToDateTime(DomHeadRet[0][”dpodate“]);//日期,DateTime类型 string cpoid = Convert.ToString(DomHeadRet[0][”cpoid“]);//订单编号,string类型 „„
/***************************** 以下是非必输字段 ****************************/ string ipresent = Convert.ToString(DomHeadRet[0][”ipresent“]);//现存量,string类型 DateTime cmaketime = Convert.ToDateTime(DomHeadRet[0][”cmaketime“]);//制单时间,DateTime类型 „„ 注意:
2)获取普通返回值
代码如下:
//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值
如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。
如,//获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult(”curID“)as string;
//获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„
2.2.2 销售管理
功能介绍
为了支持U8二次开发对业务单据的开发,本功能提供了实现销售业务单据各种操作功能的编程接口。使用销售管理API开发接口,可以完成销售管理的销售报价单、销售订单、销售发货单、销售退货单、销售普通发票、销售专用发票、委托代销发货单、委托代销结算单、销售调拨单等单据的审核、弃审、获取、新增、修改、删除。
使用环境
必须安装.NET FrameWork 2.0; 必须安装U8-872版本的销售管理产品; 必须安装API适配器组件SAAPIConcrete.dll;
接口说明
销售管理二次开发接口及参数说明: 审核或弃审单据-Audit方法
参数:
domHead
—— 单据表头,DOM对象,必输 bVerify
—— 审核/弃审标志,必输。true表审核;false表弃审
API上下文:
VoucherType —— 单据类型,必输。具体类型参看API上下文描述
删除单据-Delete方法
参数:
domHead —— 单据表头,DOM对象,必输 API上下文:
VoucherType —— 单据类型,必输。具体类型参看API上下文描述
装载单据-Load方法
参数:
domHead
—— 单据表头,DOM对象,必输 domBody
—— 单据表体,DOM对象,必输 VouchID
—— 需要装载的单据号,可选 blnAuth
—— 是否控制权限:true
API上下文:
VoucherType —— 单据类型,必输。具体类型参看API上下文描述
新增或修改单据-Save方法
参数:
domHead
—— 单据表头,DOM对象,必输 domBody
—— 单据表体,DOM对象,必输 VoucherState —— 保存状态,必输。0增加;1修改 VNewID
—— 单据的id,可选 DomConfig
—— ATO,PTO选配配置,必输,可设置为nothing API上下文:
VoucherType —— 单据类型,必输。具体类型参看API上下文描述
开发步骤
实现销售单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆
声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陆失败,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;
//登陆
String sAccID = ”(default)@001“;如果当前环境中有login对象则可以省去第一步。
2. 构造环境上下文对象,传入login,并按需设置其它上下文参数
U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;//设置上下文参数
envContext.SetApiContext(”VoucherType“, new int());//上下文数据类型:int,含义:单据类型
//构造环境上下文对象 //传入login
如果是外部事务,则需要传递ADO.Connection对象,并将IsIndependenceTransaction设置为true:
envContext.BizDbConnection = new ADO.Connection();envContext.IsIndependenceTransaction = true;3. 设置API地址标识(Url)参数
//如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API对象参数赋值
1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是构造BusinessObject对象,具体方法如下:
//首先通过GetBoParam方法获取表头表体参数
注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。
/****************************** 以下是必输字段 ****************************/ domHead[0][”id“] = ”“;//主关键字段,int类型 domHead[0][”csocode“] = ”“;//订 单 号,string类型 domHead[0][”ddate“] = ”“;//订单日期,DateTime类型 domHead[0][”cbustype“] = ”“;//业务类型,string类型
„„
/***************************** 以下是非必输字段 ****************************/ domHead[0][”fstockquanO“] = ”“;//现存件数,double类型 BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数
//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义
domHead[0][”fcanusequanO“] = ”“;//可用件数,double类型 domHead[0][”dpredatebt“] = ”“;//预发货日期,DateTime类型 domHead[0][”dpremodatebt“] = ”“;//预完工日期,DateTime类型 domHead[0][”dpredatebt“] = ”“;//预发货日期,DateTime类型
„„
2)给普通参数赋值 例如,//给普通参数VoucherState(参数名)赋值。此参数的数据类型为int,此参数按值传递,具体请参考服务接口定义
broker.AssignNormalValue(”VoucherState“, new int());注意:所有参数名不限大小写。
3)给“OUT型”参数赋值
为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。
如: „„
//该参数curID为OUT型参数,由于其数据类型为string,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”curID“)获取其值
//该参数CurDom为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数
MSXML2.IXMLDOMDocument2 CurDom = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”CurDom“, CurDom);„„
当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。
4)给“INOUT型”参数赋值 对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。
6. 调用API //示例调用如下:
if(!broker.Invoke())
{
//错误处理
Exception apiEx = broker.GetException();if(apiEx!= null){ if(apiEx is MomSysException)
}
} {
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理
//结束本次调用,释放API资源 broker.Release();return;注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。
7. 获取返回结果
1)获取BO对象
在“装载单据”时,通过GetBoParam方法获取表头或表体参数
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。
//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义
/****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(domHeadRet[0][”id“]);//主关键字段,int类型
string ccode = Convert.ToString(domHeadRet[0][”ccode“]);//单据号,string类型 DateTime ddate = Convert.ToDateTime(domHeadRet[0][”ddate“]);//日期,DateTime类型 string cbustype = Convert.ToString(domHeadRet[0][”cbustype“]);//业务类型,string类型 „„
/***************************** 以下是非必输字段 ****************************/ string cpayname = Convert.ToString(domHeadRet[0][”cpayname“]);//付款条件,string类型 string cpersonname = Convert.ToString(domHeadRet[0][”cpersonname“]);//业 务 员,string类型 double itaxrate = Convert.ToDouble(domHeadRet[0][”itaxrate“]);//税率,double类型 string cexch_name = Convert.ToString(domHeadRet[0][”cexch_name“]);//币种,string类型 „„ 注意:
2)获取普通返回值
代码如下:
//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值
如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。
如,//获取普通OUT参数curID。此返回值数据类型为string,在使用该参数之前,请判断是否为空 string curIDRet = broker.GetResult(”curID“)as string;
//获取普通OUT参数CurDom。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用 „„
2.2.3 库存管理
功能介绍
为了支持U8二次开发对业务单据的开发,本功能提供了实现库存业务单据各种操作功能的编程接口。使用库存管理的API开发接口,可以对库存管理中的采购入库单、其他入库单、其他出库单、产成品入库单、材料出库单、调拨单、组装单、拆卸单、形态转换单、盘点单、货位调整单、销售出库单、期初结存、不合格品记录单、不合格品处理单、期初不合格品、调拨申请单等单据进行审核、弃审、获取(或装载)、新增、修改、删除。
使用环境
必须安装.NET FrameWork 2.0; 必须安装U8-872版本的库存管理产品; 必须安装API适配器组件STAPIConcrete.dll 接口说明
库存管理二次开发接口说明:
审核单据-Audit方法
参数:
sVoucherType —— 单据类型:01 VoucherId
—— 单据ID errMsg
—— 错误信息
cnnFrom —— 连接对象(调用方控制事务时需要传入连接对象)TimeStamp
—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg
—— 返回DOM格式的信息:主要是可用量信息 bCheck
—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量 bList —— 传入false MakeWheres —— 传空 sWebXml —— 传入空串
oGenVouchIds —— 获取单据ID列表(返回审核时自动生成的单据的id
列表,传空)
弃审单据-CancelAudit方法
参数:
sVoucherType —— 单据类型:01 VoucherId
—— 单据ID errMsg
—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时必须传入)TimeStamp
—— 单据时间戳(用于检查单据是否修改,空串时不检查)domMsg
—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck
—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bList —— 传入false
装载单据-Load方法
参数:
sVoucherType —— 单据类型:01 sWhere —— 条件串
DomHead
—— 表头DOM对象 domBody
—— 表体DOM对象 domPos
—— 货位DOM对象 errMsg
—— 错误信息
bGetBlank
—— 是否获取空白单据 sBodyWhere_Order —— 表体排序方式字段
注意:其中sWhere设计为:
如果按单据号加载,则语法为ccode=N'要加载的单据号',例如broker.AssignNormalValue(”sWhere“, ”ccode = N'0000000001'“);
如果按单据ID加载,则语法为id=XXX,例如broker.AssignNormalValue(”sWhere“, ”id = 1“)。
删除单据-Delete方法
参数:
sVoucherType —— 单据类型:01 VoucherId
—— 单据ID errMsg
—— 错误信息 cnnFrom —— 连接对象(由调用方控制事务时需要传入连接对象)TimeStamp
—— 单据时间戳
domMsg —— 返回DOM格式的信息:主要是检查可用量和控制可
用量信息
bCheck
—— 是否进行业务检查 BeforCheckStock —— 是否检查可用量 bList
—— 传入false
添加新单据-Add方法
参数:
sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody
—— 表体DOM对象
domPosition —— 货位DOM对象:传空 errMsg
—— 返回错误信息 cnnFrom —— 连接对象,如果由调用方控制事务,则需要设置
此连接对象,否则传空
VoucherId
—— 返回单据ID domMsg —— 返回DOM格式的信息:主要返回可用量和现存量的错误信息
bCheck
—— 是否进行业务检查(是否控制可用量)bBeforCheckStock —— 是否检查可用量(检查可用量)bIsRedVouch —— 是否红字单据 sAddedState —— 传空字符串 bReMote
—— 是否远程
修改单据-Update方法
参数:
sVoucherType —— 单据类型:01 DomHead —— 表头DOM对象 domBody
—— 表体DOM对象 domPosition —— 货位DOM对象 errMsg
—— 错误信息 cnnFrom —— 连接对象
domMsg
—— 超可用量提示信息DOM对象(返回DOM格式的信息)bCheck
—— 是否进行业务检查 bBeforCheckStock —— 是否检查可用量 bIsRedVouch —— 是否红字单据 sAddedState —— 修改状态 bUpdateNeedEas —— 传true 开发步骤
实现库存单据某一功能,主要有以下七个步骤: 1. 构造u8login对象并登陆
声明和创建u8login类对象前应该先引用U8API类库中的Interop.U8Login.dll,代码示例如下:
U8Login.clsLogin u8Login = new U8Login.clsLogin();//声明u8login对象 String sSubId = ”AS“;String sYear = ”2008“;String sUserID = ”demo“;String sPassword = ”“;String sDate = ”2008-09-30“;String sServer = ”localhost“;
//登陆
String sAccID = ”(default)@001“;String sSerial = ”“;if(!u8Login.Login(ref sSubId, ref sAccID, ref sYear, ref sUserID, ref sPassword, ref sDate, ref sServer, ref sSerial)){
} Console.WriteLine(”登陆失败,原因:“ + u8Login.ShareString);Marshal.FinalReleaseComObject(u8Login);return;如果当前环境中有login对象则可以省去第一步。2. 构造环境上下文对象,传入login U8EnvContext envContext = new U8EnvContext();
envContext.U8Login = u8Login;
//构造环境上下文对象 //传入login 3. 设置API地址标识(Url)参数
//如当前API“新增或修改”的地址标识为:U8API/SaleOrder/Save
U8ApiAddress myApiAddress = new U8ApiAddress(”U8API/SaleOrder/Save“);4. 构造APIBroker U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
5. API对象参数赋值
1)给BO表头参数DomHead和表体参数domBody赋值有两种方法,如下: 方法一是直接传入MSXML2.DOMDocumentClass对象,代码如下
MSXML2.DOMDocumentClass domHead = new MSXML2.DOMDocumentClass();domHead.load(”domHead.xml“);broker.AssignNormalValue(”domHead“, domHead);
方法二是构造BusinessObject对象,具体方法如下:
//首先通过GetBoParam方法获取表头表体参数
注意:设置行数为某个值,行数并不限定为该最大值,可以一直顺序添加至任意行,但有一个规则:例如当设置为10时,可以对第0、1、„„9行赋值,当对第10行赋值时候,则会顺序添加一个新行,但此时是不能对第11行赋值的,当添加一个新行(第10行)后,又可以对第11行进行赋值。
/****************************** 以下是必输字段 ****************************/ BusinessObject DomHead = broker.GetBoParam(”DomHead“);DomHead.RowCount = 10;//设置行数
//其中,给BO对象的字段赋值,值可以是真实类型,也可以是无类型字符串 //以下代码示例只设置第一行值。各字段定义详见API服务接口定义
DomHead[0][”id“] = ”“;//主关键字段,int类型 DomHead[0][”ccvcode“] = ”“;//盘点单号,string类型 DomHead[0][”dcvdate“] = ”“;//盘点日期,DateTime类型 DomHead[0][”dacdate“] = ”“;//账面日期,DateTime类型
DomHead[0][”cwhname“] = ”“;//盘点仓库,string类型
„„
/***************************** 以下是非必输字段 ****************************/ DomHead[0][”cmodifyperson“] = ”“;//修改人,string类型 DomHead[0][”dmodifydate“] = ”“;//修改日期,DateTime类型 DomHead[0][”dnmaketime“] = ”“;//制单时间,DateTime类型 DomHead[0][”dnmodifytime“] = ”“;//修改时间,DateTime类型 DomHead[0][”dnverifytime“] = ”“;//审核时间,DateTime类型
„„
2)给普通参数赋值
例如,给普通参数sVouchType(参数名)赋值:
broker.AssignNormalValue(”sVouchType“, new System.String());
注意:所有参数名不限大小写。
3)给“OUT型”参数赋值
为方便用户使用U8API,如果参数数据类型为一般值类型,如String、Integer、Long、Single、Double、Boolean、Date,则不必传入一个参数变量(传入也可);否则,则必须一个参数变量。
如: „„
// 该参数errMsg为OUT型参数,由于其数据类型为System.String,为一般值类型,因此不必传入一个参数变量。在API调用返回时,可以通过GetResult(”errMsg“)获取其值
//该参数domMsg为OUT型参数,由于其数据类型为MSXML2.IXMLDOMDocument2,非一般值类型,因此必须传入一个参数变量。在API调用返回时,可以直接使用该参数 MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.IXMLDOMDocument2();broker.AssignNormalValue(”domMsg“, domMsg);„„
注意:当不传入一个参数变量时,在API调用返回时,可以通过GetResult(参数名)获取其值;当不必传入一个参数变量时,在API调用返回时,可以直接引用该参数。
4)给“INOUT型”参数赋值
对“INOUT型”型参数,则不论是否是一般值类型,都需要传入参数变量。其他与“OUT型”参数一样。
6. 调用API //示例调用如下: if(!broker.Invoke())
{
} 注意:对调用失败,可以获取出错信息,如果是API框架的原因,则报告MomSysException异常,如果是业务组件的原因,则报告MomBizException异常。
//错误处理
Exception apiEx = broker.GetException();if(apiEx!= null){
} //结束本次调用,释放API资源 broker.Release();return;if(apiEx is MomSysException){
} else if(apiEx is MomBizException){
} MomBizException bizEx = apiEx as MomBizException;Console.WriteLine(”API异常:“ + bizEx.Message);//todo:异常处理 MomSysException sysEx = apiEx as MomSysException;Console.WriteLine(”系统异常:“ + sysEx.Message);//todo:异常处理
7. 获取返回结果
1)获取BO对象
在“装载单据”时,通过GetBoParam方法获取表头或表体参数
BusinessObject DomHeadRet = broker.GetBoParam(”DomHead“);Console.WriteLine(”BO对象行数为:“ + DomHeadRet.RowCount);//获取BO对象的行数 如果要取原始的XMLDOM对象结果,请使用GetResult(”DomHead“)as MSXML2.DOMDocument MSXML2.DOMDocument DomHeadRet = broker.GetResult(”DomHead“)as MSXML2.DOMDocument;以上获取的行数是BO对象的实际行数。
//获取BO对象各字段的值。以下代码示例只取第一行。字段定义详见API服务接口定义
/****************************** 以下是必输字段 ****************************/ int id = Convert.ToInt32(DomHeadRet[0][”id“]);//主关键字段,int类型
string ccvcode = Convert.ToString(DomHeadRet[0][”ccvcode“]);//盘点单号,string类型 DateTime dcvdate = Convert.ToDateTime(DomHeadRet[0][”dcvdate“]);//盘点日期,DateTime类型 DateTime dacdate = Convert.ToDateTime(DomHeadRet[0][”dacdate“]);//账面日期,DateTime类型 string cwhname = Convert.ToString(DomHeadRet[0][”cwhname“]);//盘点仓库,string类型 注意: „„
/***************************** 以下是非必输字段 ****************************/ string cmodifyperson = Convert.ToString(DomHeadRet[0][”cmodifyperson“]);//修改人,string类型 DateTime dmodifydate = Convert.ToDateTime(DomHeadRet[0][”dmodifydate“]);//修改日期,DateTime类型
DateTime dnmaketime = Convert.ToDateTime(DomHeadRet[0][”dnmaketime“]);//制单时间,DateTime类型
DateTime dnmodifytime = Convert.ToDateTime(DomHeadRet[0][”dnmodifytime“]);//修改时间,DateTime类型
DateTime dnverifytime = Convert.ToDateTime(DomHeadRet[0][”dnverifytime“]);//审核时间,DateTime类型 „„
2)获取普通返回值
代码如下:
//获取普通返回值。此返回值数据类型为System.String,此参数按值传递,具体请参考服务接口定义 System.String result = broker.GetReturnValue()as System.String;3)获取普通“OUT型”或“INOUT型”返回值
如前所述,对普通“OUT型”或“INOUT型”参数,如果是一般值类型,则通过GetResult方法获取其返回值,否则直接使用该引用。
如,//获取普通OUT参数domPos。此返回值数据类型为MSXML2.IXMLDOMDocument2,前面已定义该参数,请直接使用
//获取普通OUT参数errMsg。此返回值数据类型为System.String,在使用该参数之前,请判断是否为空 System.String errMsgRet = broker.GetResult(”errMsg")as System.String;„„