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组加到“访问权限”和“启动和激活权限”,未果。

期待各位大虾门指点思路。

 
 
分类: ASP.NET
标签: ASP.NETSAPBPMK2

K2 BPM项目 基于COM组件调用SAP RFC 问题的更多相关文章

  1. C# 使用 SAP NCO3.0 调用SAP RFC函数接口

    最近使用C#调用SAP RFC函数,SAP提供了NCO3.0组件. 下载组件安装,之后引用“sapnco.dll”和“sapnco_utils.dll”两个文件. 在程序中 using SAP.Mid ...

  2. .net 调用SAP RFC函数获取数据的两种方式

    方式1:使用客户端自带的组件 安装客户端以后,添加引用:SAPFunctionsOCX(.net 的Com列表里一般找不到,需要引用DLL[一般位于以下路径:Program Files\SAP\Fro ...

  3. 最新.net和Java调用SAP RFC中间件下载

    还记得2012年初我发布的全网络第一个关于.net 连接SAP RFC的NCO3原创博文,用的就是SAP出的最新的.Net Connector 3.0的版本,在那个时候都是普遍用其他蹩脚的方式或Web ...

  4. java 调用SAP RFC函数错误信息

    RFC接口调用SAP如果有异常会通过com.sap.mw.jco.JCO$Exception: 抛出异常 在开发中遇到的异常有如下 用户名密码可能是错误或者用户无权限,确认用户,必要时联系SAP负责人 ...

  5. .net 调用SAP RFC的几种方法

    转自:http://www.cherpservice.com/pub/newsdetail.asp?Newsid=3613 第一种方式采用SAP.net Connector: 最新版本是3.,不开源, ...

  6. 验证外部系统是否成功调用SAP RFC的方法有几种?

  7. K2 BPM介绍(2)

    K2 BPM介绍(2) 上一篇已经讲了一些K2 BPM基本特性,本遍讲K2 BPM大概的组件以及组件关系. K2 BPM组件 K2 BPM分别由以下组件构成: K2产品已经发展很多年,所以它有很多版本 ...

  8. K2 BPM + SAP,实现全方面管理企业

    K2作为专业的BPM.工作流管理平台供应商,面向庞大的SAP用户群体,除了提供产品化的SAP集成工具「K2 connect」产品之外,更拥有一套得到众多客户验证的集成解决方案. 此方案可供SAP用户或 ...

  9. 基于Jetpack组件构建的开源项目-WanLearning

    「WanLearning App」基于 Material Design 风格构建的 玩 Android 客户端,主要是为了适应Kotlin语言开发流程. 主要特点 基于Google官方宣贯的MVVM模 ...

随机推荐

  1. 使用Visual Studio创建映像向导(Image Sprite)——Web Essential

    原版的:Creating Image Sprite in Visual Studio - Web Essential 译者注:有关图片精灵的信息请參阅http://baike.baidu.com/vi ...

  2. Webserver管理系列:3、Windows Update

    微软的操作系统可以使用用户过程中发现了一些漏洞,因此,他们经常发布一些系统补丁.因此,我们需要自己主动安装更新功能后,打开系统. 默认的更新功能未开启自己主动: 开启自己主动更新功能后.Windows ...

  3. Hack 语言学习/参考---1.Hack 语言

    Table of Contents What is Hack? Hack Background Summary Hack is a language for HHVM that interopates ...

  4. 伺服驱动器UVW电机电源线相序错误

       我们有必要先了解此讨论的前提:编码器初始安装相位正确.伺服驱动器将全然"採信"电机编码器的初始安装相位所表征的电机电角度相位,无需在伺服电机 的UVW动力线接线连接后进行额外 ...

  5. MySql状态查看方法 MySql如何查看连接数和状态?

    原文:MySql状态查看方法 MySql如何查看连接数和状态? 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接 怎么进入mysql命令行呢? mysql的安 ...

  6. CSS3可按进度变色的进度条

    原文:CSS3可按进度变色的进度条 今天是周末,看到一款利用CSS3实现的进度条应用,觉得非常棒,就将它分享给大家,并且将这款CSS3进度条的实现过程大致整理了一下,实现的关键是根据当前的进度需要能改 ...

  7. navicat连接oracle一个错误:ORA-12737 Instant Client Light:unsupported server character set ZHS16GBK

    今天使用Navicat连接Oracle数据库.它报告了以下错误:"ORA-12737 Instant Client Light:unsupported server character se ...

  8. 顶级jQuery树插件

    顶级jQuery树插件 顶级jQuery树插件 2013-03-05 17:20 139人阅读 评论(0) 收藏 举报 jsTree JsTree是一个基于jQuery的Tree控件.支持HTML.J ...

  9. 项目笔记---CSharp图片处理

    原文:项目笔记---CSharp图片处理 项目笔记---CSharp图片处理 最近由于项目上需要对图片进行二值化处理,就学习了相关的图片处理上的知识,从开始的二值化的意义到动态阀值检测二值化等等,并用 ...

  10. Ora创建job定时执行某存储过程

    --创建job任务,每天晚上8点执行存储过程:por_postrecords-- declare job number; begin sys.dbms_job.submit(job =>job, ...