K2 BPM项目 基于COM组件调用SAP RFC 问题
K2 BPM项目 基于COM组件调用SAP RFC 问题
问题前景:
环境:Win 2008 R2 64bit
最近项目中有支流程需求中需要在会计入账环节回写SAP的会计凭证。
SAP组给我们提供.NET基于COM组件调用SAP RFC的函数及参数,花费大量时间查阅资料终于知道怎么调用该函数:
SAPHelper.cs
private string CompanyCode { get; set; }
private string ProofDate { get; set; }
private string PostDate { get; set; }
private string OutSub { get; set; }
private string InSub { get; set; }
private string Amount { get; set; }
private string Currency { get; set; }
private string Text { get; set; }
private string UserAccount { get; set; }
private bool Flag { get; set; }
public bool MoneyTransfer(string CompanyCode, string ProofDate, string PostDate, string OutSub, string InSub, string Amount, string Currency, string Text, string UserAccount)
{
this.CompanyCode = CompanyCode;
this.ProofDate = ProofDate;
this.PostDate = PostDate;
this.OutSub = OutSub;
this.InSub = InSub;
this.Amount = Amount;
this.Currency = Currency;
this.Text = Text;
this.UserAccount = UserAccount;
Thread s = new Thread(new ThreadStart(Transfer));
s.SetApartmentState(System.Threading.ApartmentState.STA);//Set the run mode 'STA'
s.Start();//Start the thread
s.Join(); //Wait until thread run OK.
return Flag;
}
/// <summary>
/// 公司内部调拨凭证生成接口
/// </summary>
/// <param name="I_BUKRS">公司代码</param>
/// <param name="I_BLDAT">凭证日期</param>
/// <param name="I_BUDAT">过账日期</param>
/// <param name="I_OSAKNR">转出科目</param>
/// <param name="I_ISAKNR">转入科目</param>
/// <param name="I_WRBTR">金额</param>
/// <param name="I_WAERS">货币</param>
/// <param name="I_SGTXT">项目文本</param>
/// <param name="I_USERNAME">操作用户</param>
private void Transfer()
{
Connection conn = GetConnection();
try
{
//登陆
if (conn.Logon(null, true))
{
SAPFunctionsClass functions = new SAPFunctionsClass();
functions.Connection = conn;
//传入Function Name
Function fucntion = (Function)functions.Add("ZFI_FM005");
#region 传入值参数
Parameter pCompanyCode = (Parameter)fucntion.get_Exports("I_BUKRS");
pCompanyCode.Value = CompanyCode;
Parameter pProofDate = (Parameter)fucntion.get_Exports("I_BLDAT");
pProofDate.Value = ProofDate;
Parameter pPostDate = (Parameter)fucntion.get_Exports("I_BUDAT");
pPostDate.Value = PostDate;
Parameter pOutSub = (Parameter)fucntion.get_Exports("I_OSAKNR");
pOutSub.Value = OutSub;
Parameter pInSub = (Parameter)fucntion.get_Exports("I_ISAKNR");
pInSub.Value = InSub;
Parameter pAmount = (Parameter)fucntion.get_Exports("I_WRBTR");
pAmount.Value = Amount;
Parameter pCurrency = (Parameter)fucntion.get_Exports("I_WAERS");
pCurrency.Value = Currency;
Parameter pText = (Parameter)fucntion.get_Exports("I_SGTXT");
pText.Value = Text;
Parameter pUserAccount = (Parameter)fucntion.get_Exports("I_USERNAME");
pUserAccount.Value = UserAccount;
#endregion
//传出参数
Parameter OutPut = (Parameter)fucntion.get_Imports("I_RETURN");
//调用函数
if (fucntion.Call())
{
#region
string s = OutPut.Value.ToString();
//to do
if (s.Contains("错误"))
{
this.Flag = false;
}
else
{
this.Flag = true;
}
#endregion
}
}
//退出登陆
conn.Logoff();
}
catch (COMException ex)
{
conn.Logoff();
Flag= false;
}
}
private Connection GetConnection()
{
SAPLogonControlClass connctl = new SAPLogonControlClass();
connctl.Client = ConfigurationManager.AppSettings["SAPClient"];
connctl.Language = "ZH";
connctl.ApplicationServer = ConfigurationManager.AppSettings["ApplicationServer"];
connctl.SystemNumber = 00;
connctl.User = ConfigurationManager.AppSettings["SAPUser"];
connctl.Password = ConfigurationManager.AppSettings["SAPPassword"];
return (Connection)connctl.NewConnection();
}
调用:
SAPService service = new SAPService();
this.ContinueProcessFlag = service.MoneyTransfer(txtPayCompanySAPCode.Text.Trim(), txtTransferDate.Text.Trim(), txtTransferDate.Text.Trim(), txtPaySAPAccountCode.Text, txtInComeSAPAccountCode.Text, txtPayAmountLow.Text, "CNY", txtTransferReason.Text, WebContext.Current.CurrentEmployee.UserAccount);
编译完后调试,OK。
本地调试OK。
然而发布到IIS上后问题出现了:
发布后调用调试IIS(怎么调试略),发现在if (conn.Logon(null, true))停留,无法登录。
经过研究与查阅大量资料后,基本确定问题是在与IIS在调用组件的权限问题上。根据http://wenku.it168.com/d_001035865.shtml 配置DCOM权限将“启动与激活”和“访问权限”改为自定义并加上EveryOne权限,将标识改为“交互式用户”,IIS应用程序池使用的是隶属于管理员组的域帐号,托管管道模式使用的是集成模式:
然而问题依旧,尝试过将应用程序池域帐号,IUSR组,IIS_WPG组加到“访问权限”和“启动和激活权限”,未果。
期待各位大虾门指点思路。
K2 BPM项目 基于COM组件调用SAP RFC 问题的更多相关文章
- C# 使用 SAP NCO3.0 调用SAP RFC函数接口
最近使用C#调用SAP RFC函数,SAP提供了NCO3.0组件. 下载组件安装,之后引用“sapnco.dll”和“sapnco_utils.dll”两个文件. 在程序中 using SAP.Mid ...
- .net 调用SAP RFC函数获取数据的两种方式
方式1:使用客户端自带的组件 安装客户端以后,添加引用:SAPFunctionsOCX(.net 的Com列表里一般找不到,需要引用DLL[一般位于以下路径:Program Files\SAP\Fro ...
- 最新.net和Java调用SAP RFC中间件下载
还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...
- java 调用SAP RFC函数错误信息
RFC接口调用SAP如果有异常会通过com.sap.mw.jco.JCO$Exception: 抛出异常 在开发中遇到的异常有如下 用户名密码可能是错误或者用户无权限,确认用户,必要时联系SAP负责人 ...
- .net 调用SAP RFC的几种方法
转自:http://www.cherpservice.com/pub/newsdetail.asp?Newsid=3613 第一种方式采用SAP.net Connector: 最新版本是3.,不开源, ...
- 验证外部系统是否成功调用SAP RFC的方法有几种?
- K2 BPM介绍(2)
K2 BPM介绍(2) 上一篇已经讲了一些K2 BPM基本特性,本遍讲K2 BPM大概的组件以及组件关系. K2 BPM组件 K2 BPM分别由以下组件构成: K2产品已经发展很多年,所以它有很多版本 ...
- K2 BPM + SAP,实现全方面管理企业
K2作为专业的BPM.工作流管理平台供应商,面向庞大的SAP用户群体,除了提供产品化的SAP集成工具「K2 connect」产品之外,更拥有一套得到众多客户验证的集成解决方案. 此方案可供SAP用户或 ...
- 基于Jetpack组件构建的开源项目-WanLearning
「WanLearning App」基于 Material Design 风格构建的 玩 Android 客户端,主要是为了适应Kotlin语言开发流程. 主要特点 基于Google官方宣贯的MVVM模 ...
随机推荐
- C#随机双色球
using System; using System.Collections.Generic; namespace ConsoleApplicationRandnumber { class Progr ...
- 开发现代ASP.NET应用程序
新思想.新技术.新架构——更好更快的开发现代ASP.NET应用程序(续1) 今天在@张善友和@田园里的蟋蟀的博客看到微软“.Net社区虚拟大会”dotnetConf2015的信息,感谢他们的真诚付 ...
- Socket 学习(二)
1对1的发送和接收 Client 端 void ThreadReceive() { try { ...
- java环境变量配置四种方法
原文:java环境变量配置四种方法 Java编程首要工作就是安装JDK(Java Development Kit).一通“NEXT”点完安装后就是最重要的环境变量设置了.也许有人会问为什么要设置环境变 ...
- Jquery页面中添加键盘按键事件,如ESC事件
$(document).keydown(function(event){ if(event.keyCode == 38 || event.keyCode == 104){ i--; if(i<= ...
- ASP.NET 5中的Sake与KoreBuild
初识ASP.NET 5中的Sake与KoreBuild 从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命 ...
- 算法如功夫——C++ 用递归函数计算n的阶乘n!
算法如功夫,套路练久了,才干应用自如! 学功夫不能死练,知其所以然,取长补短! #include <iostream.h> int main(int argc, char* argv[]) ...
- 配置phonegap Android开发环境
phonegap的安装路途曲折,首先要基于多种程序,中途还要解决各种问题,下面是phonegap需要的程序 1.NodeJs 2.Phonegap 3.jdk,jre 4.Apache Ant 5.A ...
- 使用AdvancedInstaller打包web工程设置tomcat端口的方法
原文:使用AdvancedInstaller打包web工程设置tomcat端口的方法 1.首先,要把你要打包的tomcat下的server.xml文件删掉,因为tomcat自带的serv ...
- 网页头一定要加的代码段(加注版)一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
网页头部常见的一段代码 <!--[if lt IE 7 ]><html class="ie6"><![endif]--> <!--[i ...