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++中避免内存泄露常见的解决方式
常见内存泄露及解决方式-选自ood启发录 new/delete, array new/arrray delete匹配 case 1: 在类的构造函数与析构函数中没有匹配地调用 new/delete! ...
- 经典Loading 动漫赏析
0. 传统的菊花Loading动画 假设作为程序猿的你还在用菊花作为Loading动画,是时候换个口味了.来看下5种不错的Loading动画. 几种颜色组成的动画,给用户一个美感. 1.android ...
- 教你一步一步部署.net免费空间OpenShift系列之三------上传ASP.net程序
接上回书,创建应用后,我们如何将自己的ASP.Net部署到应用空间呢,这里用WinSCP的SFTP协议进行上传和下载 上传ASP.net程序 下载WinSCP,并打开PuTTYGen 点击Genera ...
- 吐槽一下项目中的代码坏味道:滥用java常量
我们的项目中是否充斥着类似以下的代码呢?定义一个专门存放常量的java类(接口),非常多其它类依赖该常量类. public interface IConstant { int ZERO = 0; St ...
- ionic入门之色彩、图标和边距和界面组件:列表
色彩 ionic定义了九种前景/背景/边框的色彩样式,: 可以在任何元素上使用这些样式设置前景和背景颜色: <any class="positive-bg energized" ...
- struts2源代码分析(个人觉得非常经典)
读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过.实际上Struts1.x与Struts2并无我们想象的血缘关系.虽然Struts2的开 ...
- Codeforces Round #267 (Div. 2)D(DFS+单词hash+简单DP)
D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- [SQL]死锁处理语句
原文:[SQL]死锁处理语句 引言 今天在群里看到分享的解决死锁的sql语句,就想着这东西以后肯定用的着,就下载下来,在这里记录一下,以后查找也方便. SQL SET QUOTED_IDENTIFIE ...
- 转载:每个C++开发者都应该使用的十个C++11特性
这篇文章讨论了一系列所有开发者都应该学习和使用的C++11特性,在新的C++标准中,语言和标准库都加入了很多新属性,这篇文章只会介绍一些皮毛,然而,我相信有一些特征用法应该会成为C++开发者的日常用法 ...
- 字符串json转换为xml xml转换json
原文:字符串json转换为xml xml转换json // To convert an XML node contained in string xml into a JSON string XmlD ...