cancel
Showing results for 
Search instead for 
Did you mean: 

Eventsender

Former Member
0 Kudos

Hi all,

I'm setting up B1i for SBO 2005A and I'm finding it quite hard to find good setup/configuration manuals/documentation.

I've come to the point that my B1i server is setup, the landscape with 2 SBO companies is created and the eventsender is configured in a new database I have created myself (my B1i database created by the installer is located on a different SQL server, it's on the B1i server). It is also setup for the two company databases used in the landscape. So when I do something in one of the two companies I see that data is inserted into the logtable in the B1i database I have created.

Now when I run the EventSender the following exception is thrown (which I fear is no good at all):

[code]Jun 25, 2007 2:20:25 PM com.sap.b1i.eventsender.EventSender execute

INFO: Start EventSender...

Jun 25, 2007 2:20:25 PM sun.rmi.server.UnicastServerRef logCall

FINER: RMI TCP Connection(1)-0.0.0.0: [0.0.0.0: sun.rmi.registry.RegistryImpl[0:0:0, 0]: void rebind(java.lang.String, java.rmi.Remote)]

Jun 25, 2007 2:20:26 PM sun.rmi.server.UnicastServerRef logCall

FINER: RMI TCP Connection(2)-0.0.0.0: [0.0.0.0: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]

Jun 25, 2007 2:20:26 PM sun.rmi.server.UnicastServerRef logCallException

FINE: RMI TCP Connection(1)-0.0.0.0: [0.0.0.0] exception:

java.rmi.AccessException: Registry.Registry.rebind disallowed; origin unknown

at sun.rmi.registry.RegistryImpl.checkAccess(RegistryImpl.java:205)

at sun.rmi.registry.RegistryImpl.rebind(RegistryImpl.java:152)

at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)

at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)

at sun.rmi.transport.Transport$1.run(Transport.java:159)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:155)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:754)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)

at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)

at java.lang.Thread.run(Thread.java:619)

Jun 25, 2007 2:20:26 PM com.sap.b1i.eventsender.EventSender execute

CONFIG: Get EventSender lock successfully

Jun 25, 2007 2:20:26 PM com.sap.b1i.eventsender.EventSender doSend

INFO: Connect to database:B1i...Connected

Jun 25, 2007 2:20:26 PM sun.rmi.server.UnicastServerRef logCall

FINER: RMI TCP Connection(3)-0.0.0.0: [0.0.0.0: sun.rmi.transport.DGCImpl[0:0:0, 2]: void clean(java.rmi.server.ObjID[], long, java.rmi.dgc.VMID, boolean)]

[/code]

Can someone explain why I get this exception. The user used in the landscape is a special user (superuser I have created in the two companies) and the user I use in the Eventsender is the B1ipeer user.

Can someone point to good configuration documentation of how to setup these things?

Kind regards and thnx in advance,

Dwight

Accepted Solutions (0)

Answers (6)

Answers (6)

Former Member
0 Kudos

Hi Ian,

Well I figured out how to transfer masterdata (BP/Item) for creation, updating doesn't seem to work :- (. I have created the following XSL for the businesspartners:

[code]

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:sim="urn:com.sap.b1i.sim:entity" xmlns:b1im="urn:com.sap.b1i.sim:b1imessage" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

<!-- Select the task from the message so we can output or hide different strings according to the task.-->

<xsl:param name="Task" select="/b1im:B1IMessage/b1im:Header/b1im:System/@Task"/>

<!-- Find the sending payload part and start transforming the information to the correct structure of the receiving object. -->

<xsl:template match="/">

<xsl:apply-templates select="b1im:B1IMessage/b1im:Body/b1im:Payload[starts-with(@ObjectTypeId,'B1.200') and contains(@ObjectTypeId,'_BP') and contains(@ObjectRole, 'S')]/BOM"/>

</xsl:template>

<xsl:template match="b1im:B1IMessage/b1im:Body/b1im:Payload[starts-with(@ObjectTypeId,'B1.200') and contains(@ObjectTypeId,'_BP') and contains(@ObjectRole, 'S')]/BOM">

<BOM>

<BO>

<AdmInfo>

<Object>2</Object>

<Version>2</Version>

</AdmInfo>

<QueryParams>

<CardCode>

<xsl:value-of select="BO/BusinessPartners/row/CardCode"/>

</CardCode>

</QueryParams>

<BusinessPartners>

<row>

<!-- Only output this if the task is an insert. -->

<xsl:if test="$Task='I'">

<CardCode>

<xsl:value-of select="BO/BusinessPartners/row/CardCode"/>

</CardCode>

</xsl:if>

<CardName>

<xsl:value-of select="BO/BusinessPartners/row/CardName"/>

</CardName>

</row>

</BusinessPartners>

</BO>

</BOM>

</xsl:template>

</xsl:stylesheet>

[/code]

As you can see I've made the template more strict in a way that it filters out the S part only. Is this correct, since I figured out that only the S payload is of importance.

I can't however seem to get an update to work, 2 problems with this:

- It gives a DI error since it is trying to update a read-only property (which isn't outputed by my XSL) CurrentAccountBalance.

- Can't create a BIU that handles creation/updating together.

Kind regards,

Dwight

Former Member
0 Kudos

Hi,

I've been able to successfuly transfer items between 2 SBO companies. After all the clues given here I figured out that it had something to do with the XSLT being wrong. I then saw the video from teched 05 about B1i and learned that the step prepare is the step that executes the XSLT.

I thought (and I thought wrong ) that if I was sending data from B1 to B1 that my XSLT had to transform the original document to an exact copy. So I had setup my XSLT to do a full copy of the XML. This was wrong cause (it took my some time) I have found the XSD's of the objects and know how the final document needs to look like. If I could just solve the RMI exception then my mind would be on compelte ease again :- )

Ian, can we get in contact about the master data scenario's you've already created?

Kind regards,

Dwight

Former Member
0 Kudos

Hi Dwight,

The first XLST for masted data was this:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:b1im="urn:com.sap.b1i.sim:b1imessage" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:rfc="urn:sap-com:document:sap:rfc:functions" xmlns:sim="urn:com.sap.b1i.sim:entity">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<!--From SystemID-->
<xsl:param name="CompanyCode" select="/b1im:B1IMessage/b1im:Header/b1im:System/sim:PropertyList/sim:Property[@Key='Company Code']/@Value"/>
<!--From BIU-->
<xsl:param name="B1Version" select="/b1im:B1IMessage/b1im:Header/b1im:Receiver/sim:SysId/@SysTypeId"/>
<xsl:template match="/">
<xsl:apply-templates select="b1im:B1IMessage/b1im:Body/b1im:Payload[starts-with(@ObjectTypeId,'B1.200') and contains(@ObjectTypeId,'_BP')]/BOM"/>
</xsl:template>
<xsl:template match="b1im:B1IMessage/b1im:Body/b1im:Payload[starts-with(@ObjectTypeId,'B1.200') and contains(@ObjectTypeId,'_BP')]/BOM">
<BOM>
<BO>
<AdmInfo>
<Object>2</Object>
<Version>2</Version>
</AdmInfo>
<QueryParams>
<CardCode>
<xsl:value-of select="BO/BusinessPartners/row/CardCode"/>
</CardCode>
</QueryParams>
<BusinessPartners>
<row>
<CardCode><xsl:value-of select="BO/BusinessPartners/row/CardCode"/></CardCode>
<CardName><xsl:value-of select="BO/BusinessPartners/row/CardName"/></CardName>
<CardType><xsl:value-of select="BO/BusinessPartners/row/CardType"/></CardType>
<FederalTaxID><xsl:value-of select="BO/BusinessPartners/row/FederalTaxID"/></FederalTaxID>
</row>
</BusinessPartners>	
</BO>
</BOM>
</xsl:template>
</xsl:stylesheet>

If that works, then you can go for other fields, and things like addresses, contact persons, bank accounts, etc. Of course you should be aware of the BIU document (I think you already did). What I don't know about your setup is that if you're already getting the messages in B1i or still getting errors in the event sender. If you setup B1i if a different server, can you let me know the parameters you have used?

HTH,

Ian

Former Member
0 Kudos

Hi Dhruv,

The exact error I see in the error inbox for the B1i server is the following:

- /0010000102.prepare/ipo.com.sap.b1i/P07/P07.ipo/Prepare

- com.sap.b1i.xcellerator.XcelleratorException: XCE001 Nested exception: com.sap.b1i.bizprocessor.BizProcException: BPE117 BizFlow-Execution stopped due to one or multiple thrown Exceptions; a list of the originating exceptions exists => Next appended Exception: com.sap.b1i.bizprocessor.BizProcException: BPE001 Nested exception: com.sap.b1i.utilities.UtilException: UTE001 Nested exception: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No data allowed here(:main:, row:793, col:79) =| (End of appended Exceptions)

I think it has something to do with my XSLT.

To Eddy,

I think the DI proxy isn't setup good since the exception is showing that rmi (looked this tech up and it is used to create objects on a remote location) is using IP address 0.0.0.0 and not the IP address of the server. I don't find any documentation concerning these setups in the documentation map. I have downloaded the package from the channel partner portal and I think it's not complete.

To Ian,

The B1i server is on a different server then the SBO server, and I don't think that this is the problem since everything seems to work oké.

You told that you had experience in exchange of the Master Data, do you have a sample or so I can take a look at? I would really appreciate it!

I hope we can pull these errors off together!

Kind regards,

Dwight

Former Member
0 Kudos

Hi Dwight,

I believe that you're right, that there is a problem with the XSLT. A few different things you could look for:

1) Whether the XML generated after the transformation has a root node. If it does not, B1i will throw an error.

2) Whether the data going to a particular outpath of a branch node is encapsulated in a root tag.

3) Whether in a branch statement, if you're using a node test, you are additionally <i>passing on some data to an outpath of the branch. For example:

<outpath_xp id="1" xp_expr="[count(//CardCode)>0]"/></i> --> wrong

<i><outpath_xp id="1" xp_expr="/*[count(//CardCode)>0]"/></i> --> correct.

HTH,

Dhruv

Former Member
0 Kudos

Hi Eddy,

Well I figured out how to create the landscape and a scenario of B1 to B1 but I haven't found this in a document. Are there documents available which describe (with a much detail as possible ) the following:

- Landscape creation for a system

- Scenario creation for a system

- Setting up correctly the EventSender

- Debugging BIU's

- XML scheme for the different objects

- Visual Composer: a few examples

I created a BIU which does B1 to B1 for item synchronization, with an XSLT that just outputed the source XML but this gives an error when executing it through creation of an item. The error happens on the B1i server level not on the system (company) level. Worse is that the whole system is in a deadlock since the B1i platform is trying to prepare (that's the failing IPO) over and over again. I contacted someone of SAP who told me it was oké to delete the message in the queue table of the B1i database, since there is no other possibility to kill the message, is this correct? Sorry for the overload of questions but I'm very curious

Do you have any clue why the EventSender throws an exception when I enable the line "RMICC_LOG=java.rmi.server.logCalls=true" in the diproxyserver.properties file. How to check if this DI proxy server is running oké?

Kind regards,

Dwight

Former Member
0 Kudos

Hi Dwight,

What is the error message you are recieving at the B1i server level with respect to your custom BIU?

Dhruv

Eneveux
Product and Topic Expert
Product and Topic Expert
0 Kudos

Dwight,

The documentation for B1i comes with the product in the \Documentation folder for the Content, Technology, Tools, etc. This give you install information, setup information for the landscape and the event sender, wcenario, etc.

As far as the error ... I am not sure as I am not sure if all of the pieces are setup, but if you do not have all the specifics setup, this could be the reason why.

Eddy

Former Member
0 Kudos

Hi Dwight,

Here's what I think you should do:

First what you should try is install B1i in the same server than B1, so you can test you BIU (believe me, the master synchronization is not <b>that</b> simple, but at least I have done this).

Once you have everything tested, you should go for the second task: deploy B1i in another server. I couldn't achieve this one and haven't find any documentation on how to do this, but in theory this can be done.

Now, my guessing. The one thing that <b>must</b> be running in the B1 Server about B1i is the EventSender, because it must notify the real B1i Server about the B1 events. And not only that, the B1i Server must connect to the B1 Server to get the info about the object (in other words, it should be in its landscape), but with JCO it is possible.

Now AFAIK the way of the event sender to communicate to the B1i is HTTP. So I don't think it's imposible to do it.

With this, a better scenario would be, many B1 servers and one B1i. So the next (logical) approach would be also with many B1i servers with many B1 each (that should be B1i proxy, again no documentation about it). Well, maybe I'm just dreaming...

Tell me you thoughts. Regards,

Ian

Former Member
0 Kudos

Sorry, duplicated post

Former Member
0 Kudos

Hi,

Thnx for the reply, but the article pointed to you I already examined and it doesn't hold any information about configuring the B1i server so an SBO company is properly setup. I found that the exception thrown here is raised by a logcall. I cannot judge if this log call is relevant for the B1i platform but it shure isn't healthy to have this kind of exceptions floating around

Second I'm already aware of the fact that no out of the box solutions are provided by B1i for SBO 2 SBO but what I'm (and probably a thousand of other people) are looking for is an extensive guide which covers the full installation AND configuration of the B1i platform since I wasn't able to find this kind of information...or maybe I looked into the wrong places

I'm able to proceed with my integration of two companies but more advanced stuff like what the use of the IDE is etc isn't explained. Probably there's a great lack of documentation for B1i and I hope that this is to change in the near future cause I think it's a real neat thing!

So can you provide any solution why the exception is thrown and where I can find extensive information?

Kind regards and thnx for the quick answer,

Dwight

Eneveux
Product and Topic Expert
Product and Topic Expert
0 Kudos

Dwight,

There is currently not a guide that specifically covers integrating Business One to Business One. The steps for configuring Business One to Business One are basically the same as configuring R/3 to SAP Business One. The difference is that you must create and then import the BIU's for the SBO to SBO integration. The Landscape has to be setup for SBO to SBO similar you setting up a landscape for R/3 and then Business One. You would then in each landscape the test icon to test your connections, etc.

Eddy

Eneveux
Product and Topic Expert
Product and Topic Expert
0 Kudos

Dwight,

First, by default, the out-of-the-box business scenarios are not geared to integrate two different SAP Business One databases. There are no BIU's or Business Integration Units created for this integration. You would need to modify or create the BIU's to be able to integrate Business One to Business One. You can find information on it here ...

[original link is broken]

Scroll to the bottom of this page and then you will see an example under "Code Sample".

Eddy